Intro

# Author: Paige (Spencer) Vega, Vanderbilt University, Ken Lau lab
# This tutorial was modified from Seurat's tutorials available at the links below:
# https://satijalab.org/seurat/pbmc3k_tutorial.html
# https://satijalab.org/seurat/immune_alignment.html
# You can also learn more about the Seurat tool by reading their paper:
# https://www.nature.com/articles/nbt.4096

Data information

# Kang et al., 2017 (https://www.nature.com/articles/nbt.4042)
# to download it, follow this link:
# https://www.dropbox.com/s/79q6dttg8yl20zg/immune_alignment_expression_matrices.zip?dl=1

# The first dataset is 13,019 PBMCs (peripheral blood mononuclear cells).  The second is 12,875 stimulated PBMCs.

Learning goals

# We have a few learning goals in this section of the analysis.  
#   1.  Check the quality of your data and filter it.
#   2.  Normalize, scale, and find highly variable genes (HVGs).
#   3.  Dimension reduction.
#   4.  Differential gene expression.

Call on the Seurat function

# load in the Seurat package
library(Seurat)
Loading required package: ggplot2
Loading required package: cowplot

Attaching package: ‘cowplot’

The following object is masked from ‘package:ggplot2’:

    ggsave

Loading required package: Matrix
# set your working directory
directory<-setwd("/Users/paigevega/Desktop/CQS_2018_DiscoveryOrientedDataScience")

Load in your data and create Seurat object

# load in the data
  # 35,635 rows (genes)
  # 13,019 cells (names are barcodes)
pbmc.data <- read.table(paste(directory,"/immune_control_expression_matrix.txt.gz", sep = ""), sep = "\t")
# Create the Seurat object with the raw (non-normalized data).  Keep all genes expressed in >= 5 cells. 
pbmc <- CreateSeuratObject(raw.data = pbmc.data, min.cells = 5, project = "control_PBMC")
# pbmc@raw.data

Filtering

# The number of genes and UMIs (nGene and nUMI) are automatically calculated
# for every object by Seurat. Use violin plots to visualize number genes and number UMIs.
VlnPlot(object = pbmc, features.plot = c("nGene", "nUMI"), nCol = 2, point.size.use = 0.01)

# Note: finding the percent mitochondrial genes for a dataset is a common QC metric, but, this dataset is already pre-processed to remove cells that have mitochondrial gene expression.
# GenePlot is typically used to visualize gene-gene relationships, but can be used to see how any two variables correlate.  We will use it to see how number UMIs correlate to number of genes.
# by the way, what would be "bad" and what would be "good"?
      # bad = low nGene with high nUMI => means there are few types of genes with high expression
      # good = linear correlation nGene to nUMI, with nUMI about 3-5X greater than nGene
GenePlot(object = pbmc, gene1 = "nUMI", gene2 = "nGene")

# Note: if you're trying to remove cells expressing high % mitochondrial genes, plot nUMI to % mito and QC from there.
# Based on the violin plot, filter out cells by choosing low and high thresholds.
  # get rid of cells with very few nGenes or way too many nGene
pbmc <- FilterCells(object = pbmc, subset.names = "nGene", low.thresholds = 200, high.thresholds = 1800)
# if you were removing cells with high % mito expression, remove them here with appropriate thresholds.
# pbmc@raw.data

Normalization

# Normalize the data - log normalization is default.
pbmc <- NormalizeData(object = pbmc)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# pbmc@data

Find highly variable genes (HVGs)

# Find the highly variable genes
  # identifies outliers on a 'mean variability plot', with mean expression on the x-axis and       # dispersion on the y-axis. Corrects for the dependence on the average expression by using
  # binning.  See ?FindVariableGenes for details.
pbmc <- FindVariableGenes(pbmc)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# pbmc@var.genes # contains variable genes
# pbmc@hvg.info  # contains results of HVG analysis

Scale data

# removes "uninteresting sources of variation", like technical noise, or cell cycle
# linear regression to predict gene expression. See ?ScaleData for more information.
pbmc <- ScaleData(pbmc)
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |======                                                                            |   7%
  |                                                                                        
  |============                                                                      |  14%
  |                                                                                        
  |==================                                                                |  21%
  |                                                                                        
  |=======================                                                           |  29%
  |                                                                                        
  |=============================                                                     |  36%
  |                                                                                        
  |===================================                                               |  43%
  |                                                                                        
  |=========================================                                         |  50%
  |                                                                                        
  |===============================================                                   |  57%
  |                                                                                        
  |=====================================================                             |  64%
  |                                                                                        
  |===========================================================                       |  71%
  |                                                                                        
  |================================================================                  |  79%
  |                                                                                        
  |======================================================================            |  86%
  |                                                                                        
  |============================================================================      |  93%
  |                                                                                        
  |==================================================================================| 100%
# pbmc@scale.data

Dimensionality reduction (PCA)

# Run PCA using the HVGs
pbmc <- RunPCA(object = pbmc, pc.genes = pbmc@var.genes, pcs.compute = 30, do.print = FALSE)
# pbmc@dr$pca

Choose PCs

# Principle components (PCs) capture the variability in your dataset.  Although we specified 30 PCs, we want to use only the PCs that capture variability and discard the rest for downstream analyses.  You look for saturation (flatline) in the relationship between the number of principle components and the percentage of the variance explained.
# 3 ways to look at PCs...
# 1. Elbow plot of principal components
PCElbowPlot(object = pbmc, num.pc = 30)

# 2. Heatmap of individual PCs
PCHeatmap(object = pbmc, pc.use = 1:15, cells.use = 500, do.balanced = TRUE, label.column = FALSE, use.full = FALSE)

PCHeatmap(object = pbmc, pc.use = 16:30, cells.use = 500, do.balanced = TRUE, label.column = FALSE, use.full = FALSE)

# 3. Jackstraw package to determine statistically significant principal components
pbmc <- JackStraw(object = pbmc, num.pc = 30, num.replicate = 100, display.progress = TRUE)

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |=                                                                                 |   1%
  |                                                                                        
  |==                                                                                |   2%
  |                                                                                        
  |==                                                                                |   3%
  |                                                                                        
  |===                                                                               |   4%
  |                                                                                        
  |====                                                                              |   5%
  |                                                                                        
  |=====                                                                             |   6%
  |                                                                                        
  |======                                                                            |   7%
  |                                                                                        
  |=======                                                                           |   8%
  |                                                                                        
  |=======                                                                           |   9%
  |                                                                                        
  |========                                                                          |  10%
  |                                                                                        
  |=========                                                                         |  11%
  |                                                                                        
  |==========                                                                        |  12%
  |                                                                                        
  |===========                                                                       |  13%
  |                                                                                        
  |===========                                                                       |  14%
  |                                                                                        
  |============                                                                      |  15%
  |                                                                                        
  |=============                                                                     |  16%
  |                                                                                        
  |==============                                                                    |  17%
  |                                                                                        
  |===============                                                                   |  18%
  |                                                                                        
  |================                                                                  |  19%
  |                                                                                        
  |================                                                                  |  20%
  |                                                                                        
  |=================                                                                 |  21%
  |                                                                                        
  |==================                                                                |  22%
  |                                                                                        
  |===================                                                               |  23%
  |                                                                                        
  |====================                                                              |  24%
  |                                                                                        
  |====================                                                              |  25%
  |                                                                                        
  |=====================                                                             |  26%
  |                                                                                        
  |======================                                                            |  27%
  |                                                                                        
  |=======================                                                           |  28%
  |                                                                                        
  |========================                                                          |  29%
  |                                                                                        
  |=========================                                                         |  30%
  |                                                                                        
  |=========================                                                         |  31%
  |                                                                                        
  |==========================                                                        |  32%
  |                                                                                        
  |===========================                                                       |  33%
  |                                                                                        
  |============================                                                      |  34%
  |                                                                                        
  |=============================                                                     |  35%
  |                                                                                        
  |==============================                                                    |  36%
  |                                                                                        
  |==============================                                                    |  37%
  |                                                                                        
  |===============================                                                   |  38%
  |                                                                                        
  |================================                                                  |  39%
  |                                                                                        
  |=================================                                                 |  40%
  |                                                                                        
  |==================================                                                |  41%
  |                                                                                        
  |==================================                                                |  42%
  |                                                                                        
  |===================================                                               |  43%
  |                                                                                        
  |====================================                                              |  44%
  |                                                                                        
  |=====================================                                             |  45%
  |                                                                                        
  |======================================                                            |  46%
  |                                                                                        
  |=======================================                                           |  47%
  |                                                                                        
  |=======================================                                           |  48%
  |                                                                                        
  |========================================                                          |  49%
  |                                                                                        
  |=========================================                                         |  50%
  |                                                                                        
  |==========================================                                        |  51%
  |                                                                                        
  |===========================================                                       |  52%
  |                                                                                        
  |===========================================                                       |  53%
  |                                                                                        
  |============================================                                      |  54%
  |                                                                                        
  |=============================================                                     |  55%
  |                                                                                        
  |==============================================                                    |  56%
  |                                                                                        
  |===============================================                                   |  57%
  |                                                                                        
  |================================================                                  |  58%
  |                                                                                        
  |================================================                                  |  59%
  |                                                                                        
  |=================================================                                 |  60%
  |                                                                                        
  |==================================================                                |  61%
  |                                                                                        
  |===================================================                               |  62%
  |                                                                                        
  |====================================================                              |  63%
  |                                                                                        
  |====================================================                              |  64%
  |                                                                                        
  |=====================================================                             |  65%
  |                                                                                        
  |======================================================                            |  66%
  |                                                                                        
  |=======================================================                           |  67%
  |                                                                                        
  |========================================================                          |  68%
  |                                                                                        
  |=========================================================                         |  69%
  |                                                                                        
  |=========================================================                         |  70%
  |                                                                                        
  |==========================================================                        |  71%
  |                                                                                        
  |===========================================================                       |  72%
  |                                                                                        
  |============================================================                      |  73%
  |                                                                                        
  |=============================================================                     |  74%
  |                                                                                        
  |==============================================================                    |  75%
  |                                                                                        
  |==============================================================                    |  76%
  |                                                                                        
  |===============================================================                   |  77%
  |                                                                                        
  |================================================================                  |  78%
  |                                                                                        
  |=================================================================                 |  79%
  |                                                                                        
  |==================================================================                |  80%
  |                                                                                        
  |==================================================================                |  81%
  |                                                                                        
  |===================================================================               |  82%
  |                                                                                        
  |====================================================================              |  83%
  |                                                                                        
  |=====================================================================             |  84%
  |                                                                                        
  |======================================================================            |  85%
  |                                                                                        
  |=======================================================================           |  86%
  |                                                                                        
  |=======================================================================           |  87%
  |                                                                                        
  |========================================================================          |  88%
  |                                                                                        
  |=========================================================================         |  89%
  |                                                                                        
  |==========================================================================        |  90%
  |                                                                                        
  |===========================================================================       |  91%
  |                                                                                        
  |===========================================================================       |  92%
  |                                                                                        
  |============================================================================      |  93%
  |                                                                                        
  |=============================================================================     |  94%
  |                                                                                        
  |==============================================================================    |  95%
  |                                                                                        
  |===============================================================================   |  96%
  |                                                                                        
  |================================================================================  |  97%
  |                                                                                        
  |================================================================================  |  98%
  |                                                                                        
  |================================================================================= |  99%
  |                                                                                        
  |==================================================================================| 100%
Time Elapsed:  20.3681108673414 mins 
JackStrawPlot(object = pbmc, PCs = 1:30)
An object of class seurat in project control_PBMC 
 13537 genes across 12927 samples.

Use PCs to cluster and visualize clustering with t-SNE

# Clustering using Seurat's method. See more info in ?FindClusters.
  # specify the number of PCs using dims.use
pbmc <- FindClusters(object = pbmc, reduction.type = "pca", dims.use = 1:20, resolution = 0.6,
                     print.output = 0, save.SNN = TRUE)
# pbmc@ident
# Run dimension reduction (t-SNE) to visualize the clustering
pbmc <- Seurat::RunTSNE(object = pbmc, dims.use = 1:20, do.fast = TRUE)
TSNEPlot(object = pbmc)

Differential gene expression - one cluster at a time

# cluster 1 vs all other clusters pooled together
cluster1.markers <- FindMarkers(object = pbmc, ident.1 = 1, min.pct = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 48s      
   |+                                                 | 2 % ~03m 24s      
   |++                                                | 3 % ~03m 08s      
   |++                                                | 4 % ~02m 60s      
   |+++                                               | 5 % ~02m 49s      
   |+++                                               | 6 % ~02m 40s      
   |++++                                              | 7 % ~02m 35s      
   |++++                                              | 8 % ~02m 33s      
   |+++++                                             | 9 % ~02m 33s      
   |+++++                                             | 10% ~02m 29s      
   |++++++                                            | 11% ~02m 25s      
   |++++++                                            | 12% ~02m 24s      
   |+++++++                                           | 13% ~02m 22s      
   |+++++++                                           | 14% ~02m 23s      
   |++++++++                                          | 15% ~02m 21s      
   |++++++++                                          | 16% ~02m 18s      
   |+++++++++                                         | 17% ~02m 16s      
   |+++++++++                                         | 18% ~02m 14s      
   |++++++++++                                        | 19% ~02m 11s      
   |++++++++++                                        | 20% ~02m 08s      
   |+++++++++++                                       | 21% ~02m 06s      
   |+++++++++++                                       | 22% ~02m 05s      
   |++++++++++++                                      | 23% ~02m 05s      
   |++++++++++++                                      | 24% ~02m 03s      
   |+++++++++++++                                     | 25% ~02m 04s      
   |+++++++++++++                                     | 26% ~02m 01s      
   |++++++++++++++                                    | 27% ~02m 01s      
   |++++++++++++++                                    | 28% ~01m 58s      
   |+++++++++++++++                                   | 29% ~01m 56s      
   |+++++++++++++++                                   | 30% ~01m 55s      
   |++++++++++++++++                                  | 31% ~01m 53s      
   |++++++++++++++++                                  | 32% ~01m 50s      
   |+++++++++++++++++                                 | 33% ~01m 48s      
   |+++++++++++++++++                                | 34% ~01m 46s      
   |++++++++++++++++++                                | 35% ~01m 45s      
   |++++++++++++++++++                                | 36% ~01m 44s      
   |+++++++++++++++++++                               | 37% ~01m 42s      
   |+++++++++++++++++++                               | 38% ~01m 40s      
   |++++++++++++++++++++                              | 39% ~01m 38s      
   |++++++++++++++++++++                              | 40% ~01m 36s      
   |+++++++++++++++++++++                             | 41% ~01m 34s      
   |+++++++++++++++++++++                             | 42% ~01m 33s      
   |++++++++++++++++++++++                            | 43% ~01m 32s      
   |++++++++++++++++++++++                            | 44% ~01m 30s      
   |+++++++++++++++++++++++                           | 45% ~01m 28s      
   |+++++++++++++++++++++++                           | 46% ~01m 26s      
   |++++++++++++++++++++++++                          | 47% ~01m 25s      
   |++++++++++++++++++++++++                          | 48% ~01m 24s      
   |+++++++++++++++++++++++++                         | 49% ~01m 22s      
   |+++++++++++++++++++++++++                         | 50% ~01m 21s      
   |++++++++++++++++++++++++++                        | 51% ~01m 20s      
   |++++++++++++++++++++++++++                        | 52% ~01m 19s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 17s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 15s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 14s      
   |++++++++++++++++++++++++++++                     | 56% ~01m 12s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 10s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 09s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 07s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 05s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 04s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 02s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 00s      
   |++++++++++++++++++++++++++++++++                  | 64% ~58s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~57s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~55s          
   |++++++++++++++++++++++++++++++++++                | 67% ~54s          
   |++++++++++++++++++++++++++++++++++               | 68% ~52s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~50s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~49s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~47s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~46s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~44s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~42s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~41s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~39s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~37s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~36s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~34s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~31s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 41s
print(x = head(x = cluster1.markers, n =5))
       p_val avg_logFC pct.1 pct.2 p_val_adj
S100A8     0  2.965944 0.852 0.050         0
CCL2       0  2.926204 0.468 0.038         0
IL8        0  2.769285 0.880 0.091         0
S100A9     0  2.730468 0.762 0.043         0
FTL        0  2.405877 1.000 0.872         0
# cluster 1 vs cluster 4 and 5
cluster1.markers.5 <- FindMarkers(object = pbmc, ident.1 = 1, ident.2 = 5, min.pct = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~23s          
   |++                                                | 2 % ~21s          
   |++                                                | 3 % ~20s          
   |+++                                               | 5 % ~19s          
   |+++                                               | 6 % ~19s          
   |++++                                              | 7 % ~19s          
   |+++++                                             | 8 % ~18s          
   |+++++                                             | 9 % ~18s          
   |++++++                                            | 10% ~18s          
   |++++++                                            | 11% ~17s          
   |+++++++                                           | 13% ~17s          
   |+++++++                                           | 14% ~17s          
   |++++++++                                          | 15% ~16s          
   |+++++++++                                         | 16% ~16s          
   |+++++++++                                         | 17% ~16s          
   |++++++++++                                        | 18% ~16s          
   |++++++++++                                        | 20% ~15s          
   |+++++++++++                                       | 21% ~15s          
   |+++++++++++                                       | 22% ~15s          
   |++++++++++++                                      | 23% ~15s          
   |+++++++++++++                                     | 24% ~15s          
   |+++++++++++++                                     | 25% ~14s          
   |++++++++++++++                                    | 26% ~14s          
   |++++++++++++++                                    | 28% ~14s          
   |+++++++++++++++                                   | 29% ~14s          
   |+++++++++++++++                                   | 30% ~14s          
   |++++++++++++++++                                  | 31% ~14s          
   |+++++++++++++++++                                 | 32% ~13s          
   |+++++++++++++++++                                 | 33% ~13s          
   |++++++++++++++++++                                | 34% ~13s          
   |++++++++++++++++++                                | 36% ~13s          
   |+++++++++++++++++++                               | 37% ~13s          
   |+++++++++++++++++++                               | 38% ~13s          
   |++++++++++++++++++++                              | 39% ~12s          
   |+++++++++++++++++++++                             | 40% ~12s          
   |+++++++++++++++++++++                             | 41% ~12s          
   |++++++++++++++++++++++                            | 43% ~12s          
   |++++++++++++++++++++++                            | 44% ~12s          
   |+++++++++++++++++++++++                           | 45% ~11s          
   |+++++++++++++++++++++++                           | 46% ~11s          
   |++++++++++++++++++++++++                          | 47% ~11s          
   |+++++++++++++++++++++++++                         | 48% ~11s          
   |+++++++++++++++++++++++++                         | 49% ~10s          
   |++++++++++++++++++++++++++                        | 51% ~10s          
   |++++++++++++++++++++++++++                        | 52% ~10s          
   |+++++++++++++++++++++++++++                       | 53% ~10s          
   |++++++++++++++++++++++++++++                      | 54% ~10s          
   |++++++++++++++++++++++++++++                      | 55% ~09s          
   |+++++++++++++++++++++++++++++                     | 56% ~09s          
   |+++++++++++++++++++++++++++++                     | 57% ~09s          
   |++++++++++++++++++++++++++++++                    | 59% ~09s          
   |++++++++++++++++++++++++++++++                    | 60% ~08s          
   |+++++++++++++++++++++++++++++++                   | 61% ~08s          
   |++++++++++++++++++++++++++++++++                  | 62% ~08s          
   |++++++++++++++++++++++++++++++++                  | 63% ~08s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~07s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~07s          
   |++++++++++++++++++++++++++++++++++                | 67% ~07s          
   |++++++++++++++++++++++++++++++++++                | 68% ~07s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~06s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~06s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~06s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~06s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~06s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~05s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~05s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~05s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~05s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 21s
print(x = head(x = cluster1.markers.5, n =5))
                 p_val avg_logFC pct.1 pct.2     p_val_adj
VMO1     1.981317e-239 -2.590454 0.100 0.620 2.682109e-235
TNFSF10  4.458680e-222 -1.693412 0.023 0.434 6.035714e-218
FCGR3A   7.791344e-195 -1.641433 0.408 0.841 1.054714e-190
TNFSF13B 2.400820e-180 -1.271797 0.051 0.459 3.249990e-176
FAM26F   4.024863e-177 -1.594279 0.066 0.482 5.448457e-173

Differential gene expression - iterate through all clusters

# Find markers for every cluster compared to all remaining cells, report only positive ones
pbmc.markers <- FindAllMarkers(object = pbmc, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 31s      
   |++                                                | 2 % ~01m 60s      
   |++                                                | 4 % ~01m 56s      
   |+++                                               | 5 % ~01m 56s      
   |+++                                               | 6 % ~01m 54s      
   |++++                                              | 7 % ~01m 55s      
   |+++++                                             | 8 % ~01m 56s      
   |+++++                                             | 9 % ~01m 53s      
   |++++++                                            | 11% ~01m 50s      
   |++++++                                            | 12% ~01m 47s      
   |+++++++                                           | 13% ~01m 48s      
   |++++++++                                          | 14% ~01m 45s      
   |++++++++                                          | 15% ~01m 43s      
   |+++++++++                                         | 16% ~01m 44s      
   |+++++++++                                         | 18% ~01m 47s      
   |++++++++++                                        | 19% ~01m 44s      
   |++++++++++                                        | 20% ~01m 42s      
   |+++++++++++                                       | 21% ~01m 39s      
   |++++++++++++                                      | 22% ~01m 37s      
   |++++++++++++                                      | 24% ~01m 34s      
   |+++++++++++++                                     | 25% ~01m 31s      
   |+++++++++++++                                     | 26% ~01m 29s      
   |++++++++++++++                                    | 27% ~01m 27s      
   |+++++++++++++++                                   | 28% ~01m 25s      
   |+++++++++++++++                                   | 29% ~01m 23s      
   |++++++++++++++++                                  | 31% ~01m 21s      
   |++++++++++++++++                                  | 32% ~01m 19s      
   |+++++++++++++++++                                 | 33% ~01m 17s      
   |++++++++++++++++++                                | 34% ~01m 15s      
   |++++++++++++++++++                                | 35% ~01m 13s      
   |+++++++++++++++++++                               | 36% ~01m 12s      
   |+++++++++++++++++++                               | 38% ~01m 10s      
   |++++++++++++++++++++                              | 39% ~01m 08s      
   |++++++++++++++++++++                              | 40% ~01m 07s      
   |+++++++++++++++++++++                             | 41% ~01m 05s      
   |++++++++++++++++++++++                            | 42% ~01m 04s      
   |++++++++++++++++++++++                            | 44% ~01m 02s      
   |+++++++++++++++++++++++                           | 45% ~01m 01s      
   |+++++++++++++++++++++++                           | 46% ~59s          
   |++++++++++++++++++++++++                          | 47% ~58s          
   |+++++++++++++++++++++++++                         | 48% ~56s          
   |+++++++++++++++++++++++++                         | 49% ~55s          
   |++++++++++++++++++++++++++                        | 51% ~54s          
   |++++++++++++++++++++++++++                        | 52% ~53s          
   |+++++++++++++++++++++++++++                       | 53% ~51s          
   |++++++++++++++++++++++++++++                      | 54% ~50s          
   |++++++++++++++++++++++++++++                      | 55% ~48s          
   |+++++++++++++++++++++++++++++                     | 56% ~47s          
   |+++++++++++++++++++++++++++++                     | 58% ~46s          
   |++++++++++++++++++++++++++++++                    | 59% ~44s          
   |++++++++++++++++++++++++++++++                    | 60% ~43s          
   |+++++++++++++++++++++++++++++++                   | 61% ~42s          
   |++++++++++++++++++++++++++++++++                  | 62% ~40s          
   |++++++++++++++++++++++++++++++++                  | 64% ~39s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~38s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~36s          
   |++++++++++++++++++++++++++++++++++                | 67% ~35s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~34s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~32s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~31s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~30s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~28s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~28s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~27s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~25s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~24s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~23s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 44s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 38s      
   |+                                                 | 2 % ~02m 46s      
   |++                                                | 3 % ~02m 37s      
   |++                                                | 4 % ~02m 29s      
   |+++                                               | 5 % ~02m 24s      
   |+++                                               | 6 % ~02m 21s      
   |++++                                              | 7 % ~02m 18s      
   |++++                                              | 8 % ~02m 14s      
   |+++++                                             | 9 % ~02m 12s      
   |+++++                                             | 10% ~02m 12s      
   |++++++                                            | 11% ~02m 10s      
   |++++++                                            | 12% ~02m 08s      
   |+++++++                                           | 13% ~02m 05s      
   |+++++++                                           | 14% ~02m 04s      
   |++++++++                                          | 15% ~02m 02s      
   |++++++++                                          | 16% ~02m 00s      
   |+++++++++                                         | 17% ~01m 59s      
   |+++++++++                                         | 18% ~01m 58s      
   |++++++++++                                        | 19% ~01m 57s      
   |++++++++++                                        | 20% ~01m 59s      
   |+++++++++++                                       | 21% ~01m 57s      
   |+++++++++++                                       | 22% ~01m 55s      
   |++++++++++++                                      | 23% ~01m 53s      
   |++++++++++++                                      | 24% ~01m 51s      
   |+++++++++++++                                     | 25% ~01m 50s      
   |+++++++++++++                                     | 26% ~01m 48s      
   |++++++++++++++                                    | 27% ~01m 46s      
   |++++++++++++++                                    | 28% ~01m 45s      
   |+++++++++++++++                                   | 29% ~01m 43s      
   |+++++++++++++++                                   | 30% ~01m 42s      
   |++++++++++++++++                                  | 31% ~01m 40s      
   |++++++++++++++++                                  | 32% ~01m 38s      
   |+++++++++++++++++                                 | 33% ~01m 37s      
   |+++++++++++++++++                                | 34% ~01m 38s      
   |++++++++++++++++++                                | 35% ~01m 36s      
   |++++++++++++++++++                                | 36% ~01m 34s      
   |+++++++++++++++++++                               | 37% ~01m 32s      
   |+++++++++++++++++++                               | 38% ~01m 31s      
   |++++++++++++++++++++                              | 39% ~01m 31s      
   |++++++++++++++++++++                              | 40% ~01m 30s      
   |+++++++++++++++++++++                             | 41% ~01m 28s      
   |+++++++++++++++++++++                             | 42% ~01m 27s      
   |++++++++++++++++++++++                            | 43% ~01m 25s      
   |++++++++++++++++++++++                            | 44% ~01m 24s      
   |+++++++++++++++++++++++                           | 45% ~01m 23s      
   |+++++++++++++++++++++++                           | 46% ~01m 21s      
   |++++++++++++++++++++++++                          | 47% ~01m 20s      
   |++++++++++++++++++++++++                          | 48% ~01m 18s      
   |+++++++++++++++++++++++++                         | 49% ~01m 21s      
   |+++++++++++++++++++++++++                         | 50% ~01m 19s      
   |++++++++++++++++++++++++++                        | 51% ~01m 17s      
   |++++++++++++++++++++++++++                        | 52% ~01m 15s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 13s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 12s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 10s      
   |++++++++++++++++++++++++++++                     | 56% ~01m 09s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 07s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 06s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 04s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 02s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 01s      
   |+++++++++++++++++++++++++++++++                   | 62% ~59s          
   |++++++++++++++++++++++++++++++++                  | 63% ~57s          
   |++++++++++++++++++++++++++++++++                  | 64% ~56s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~54s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~52s          
   |++++++++++++++++++++++++++++++++++                | 67% ~51s          
   |++++++++++++++++++++++++++++++++++               | 68% ~49s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~48s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~46s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~44s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~43s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~41s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~40s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~39s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~37s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~35s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~34s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~32s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~31s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~29s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~28s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~26s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~23s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 32s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 58s      
   |++                                                | 2 % ~01m 36s      
   |++                                                | 4 % ~01m 22s      
   |+++                                               | 5 % ~01m 12s      
   |++++                                              | 6 % ~01m 05s      
   |++++                                              | 7 % ~60s          
   |+++++                                             | 9 % ~57s          
   |+++++                                             | 10% ~54s          
   |++++++                                            | 11% ~53s          
   |+++++++                                           | 12% ~51s          
   |+++++++                                           | 14% ~49s          
   |++++++++                                          | 15% ~51s          
   |+++++++++                                         | 16% ~49s          
   |+++++++++                                         | 17% ~48s          
   |++++++++++                                        | 19% ~47s          
   |++++++++++                                        | 20% ~46s          
   |+++++++++++                                       | 21% ~45s          
   |++++++++++++                                      | 22% ~46s          
   |++++++++++++                                      | 23% ~45s          
   |+++++++++++++                                     | 25% ~48s          
   |+++++++++++++                                     | 26% ~48s          
   |++++++++++++++                                    | 27% ~48s          
   |+++++++++++++++                                   | 28% ~47s          
   |+++++++++++++++                                   | 30% ~45s          
   |++++++++++++++++                                  | 31% ~44s          
   |+++++++++++++++++                                 | 32% ~43s          
   |+++++++++++++++++                                 | 33% ~42s          
   |++++++++++++++++++                                | 35% ~40s          
   |++++++++++++++++++                                | 36% ~39s          
   |+++++++++++++++++++                               | 37% ~38s          
   |++++++++++++++++++++                              | 38% ~39s          
   |++++++++++++++++++++                              | 40% ~37s          
   |+++++++++++++++++++++                             | 41% ~36s          
   |+++++++++++++++++++++                             | 42% ~36s          
   |++++++++++++++++++++++                            | 43% ~35s          
   |+++++++++++++++++++++++                           | 44% ~34s          
   |+++++++++++++++++++++++                           | 46% ~33s          
   |++++++++++++++++++++++++                          | 47% ~32s          
   |+++++++++++++++++++++++++                         | 48% ~31s          
   |+++++++++++++++++++++++++                         | 49% ~30s          
   |++++++++++++++++++++++++++                        | 51% ~29s          
   |++++++++++++++++++++++++++                        | 52% ~28s          
   |+++++++++++++++++++++++++++                       | 53% ~27s          
   |++++++++++++++++++++++++++++                      | 54% ~26s          
   |++++++++++++++++++++++++++++                      | 56% ~25s          
   |+++++++++++++++++++++++++++++                     | 57% ~24s          
   |++++++++++++++++++++++++++++++                    | 58% ~24s          
   |++++++++++++++++++++++++++++++                    | 59% ~23s          
   |+++++++++++++++++++++++++++++++                   | 60% ~22s          
   |+++++++++++++++++++++++++++++++                   | 62% ~21s          
   |++++++++++++++++++++++++++++++++                  | 63% ~20s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~20s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~19s          
   |++++++++++++++++++++++++++++++++++                | 67% ~18s          
   |++++++++++++++++++++++++++++++++++                | 68% ~17s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~17s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~16s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~15s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~14s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~13s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~12s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 52s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 21s      
   |++                                                | 3 % ~02m 38s      
   |+++                                               | 4 % ~02m 02s      
   |+++                                               | 6 % ~01m 43s      
   |++++                                              | 7 % ~01m 33s      
   |+++++                                             | 8 % ~01m 29s      
   |+++++                                             | 10% ~01m 25s      
   |++++++                                            | 11% ~01m 21s      
   |+++++++                                           | 12% ~01m 16s      
   |+++++++                                           | 14% ~01m 13s      
   |++++++++                                          | 15% ~01m 10s      
   |+++++++++                                         | 17% ~01m 07s      
   |++++++++++                                        | 18% ~01m 04s      
   |++++++++++                                        | 19% ~01m 02s      
   |+++++++++++                                       | 21% ~60s          
   |++++++++++++                                      | 22% ~58s          
   |++++++++++++                                      | 24% ~56s          
   |+++++++++++++                                     | 25% ~54s          
   |++++++++++++++                                    | 26% ~53s          
   |++++++++++++++                                    | 28% ~52s          
   |+++++++++++++++                                   | 29% ~51s          
   |++++++++++++++++                                  | 31% ~49s          
   |++++++++++++++++                                  | 32% ~48s          
   |+++++++++++++++++                                 | 33% ~47s          
   |++++++++++++++++++                                | 35% ~47s          
   |+++++++++++++++++++                               | 36% ~46s          
   |+++++++++++++++++++                               | 38% ~45s          
   |++++++++++++++++++++                              | 39% ~45s          
   |+++++++++++++++++++++                             | 40% ~43s          
   |+++++++++++++++++++++                             | 42% ~42s          
   |++++++++++++++++++++++                            | 43% ~41s          
   |+++++++++++++++++++++++                           | 44% ~40s          
   |+++++++++++++++++++++++                           | 46% ~39s          
   |++++++++++++++++++++++++                          | 47% ~38s          
   |+++++++++++++++++++++++++                         | 49% ~38s          
   |+++++++++++++++++++++++++                         | 50% ~37s          
   |++++++++++++++++++++++++++                        | 51% ~36s          
   |+++++++++++++++++++++++++++                       | 53% ~35s          
   |++++++++++++++++++++++++++++                      | 54% ~34s          
   |++++++++++++++++++++++++++++                      | 56% ~33s          
   |+++++++++++++++++++++++++++++                     | 57% ~32s          
   |++++++++++++++++++++++++++++++                    | 58% ~31s          
   |++++++++++++++++++++++++++++++                    | 60% ~30s          
   |+++++++++++++++++++++++++++++++                   | 61% ~29s          
   |++++++++++++++++++++++++++++++++                  | 62% ~28s          
   |++++++++++++++++++++++++++++++++                  | 64% ~27s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~26s          
   |++++++++++++++++++++++++++++++++++                | 67% ~25s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~24s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~23s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~22s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~21s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~20s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~19s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~18s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~18s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 15s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 11s      
   |++                                                | 2 % ~01m 42s      
   |++                                                | 4 % ~01m 31s      
   |+++                                               | 5 % ~01m 25s      
   |+++                                               | 6 % ~01m 21s      
   |++++                                              | 7 % ~01m 17s      
   |+++++                                             | 8 % ~01m 14s      
   |+++++                                             | 10% ~01m 11s      
   |++++++                                            | 11% ~01m 09s      
   |++++++                                            | 12% ~01m 07s      
   |+++++++                                           | 13% ~01m 06s      
   |++++++++                                          | 14% ~01m 04s      
   |++++++++                                          | 15% ~01m 02s      
   |+++++++++                                         | 17% ~01m 01s      
   |+++++++++                                         | 18% ~01m 03s      
   |++++++++++                                        | 19% ~01m 02s      
   |+++++++++++                                       | 20% ~01m 00s      
   |+++++++++++                                       | 21% ~59s          
   |++++++++++++                                      | 23% ~57s          
   |++++++++++++                                      | 24% ~56s          
   |+++++++++++++                                     | 25% ~54s          
   |++++++++++++++                                    | 26% ~53s          
   |++++++++++++++                                    | 27% ~52s          
   |+++++++++++++++                                   | 29% ~51s          
   |+++++++++++++++                                   | 30% ~51s          
   |++++++++++++++++                                  | 31% ~50s          
   |+++++++++++++++++                                 | 32% ~49s          
   |+++++++++++++++++                                 | 33% ~48s          
   |++++++++++++++++++                                | 35% ~48s          
   |++++++++++++++++++                                | 36% ~47s          
   |+++++++++++++++++++                               | 37% ~47s          
   |++++++++++++++++++++                              | 38% ~47s          
   |++++++++++++++++++++                              | 39% ~46s          
   |+++++++++++++++++++++                             | 40% ~45s          
   |+++++++++++++++++++++                             | 42% ~44s          
   |++++++++++++++++++++++                            | 43% ~43s          
   |+++++++++++++++++++++++                           | 44% ~42s          
   |+++++++++++++++++++++++                           | 45% ~41s          
   |++++++++++++++++++++++++                          | 46% ~40s          
   |++++++++++++++++++++++++                          | 48% ~40s          
   |+++++++++++++++++++++++++                         | 49% ~39s          
   |+++++++++++++++++++++++++                         | 50% ~38s          
   |++++++++++++++++++++++++++                        | 51% ~37s          
   |+++++++++++++++++++++++++++                       | 52% ~36s          
   |+++++++++++++++++++++++++++                       | 54% ~35s          
   |++++++++++++++++++++++++++++                      | 55% ~34s          
   |++++++++++++++++++++++++++++                      | 56% ~33s          
   |+++++++++++++++++++++++++++++                     | 57% ~32s          
   |++++++++++++++++++++++++++++++                    | 58% ~31s          
   |++++++++++++++++++++++++++++++                    | 60% ~30s          
   |+++++++++++++++++++++++++++++++                   | 61% ~29s          
   |+++++++++++++++++++++++++++++++                   | 62% ~28s          
   |++++++++++++++++++++++++++++++++                  | 63% ~27s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~27s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~27s          
   |++++++++++++++++++++++++++++++++++                | 67% ~26s          
   |++++++++++++++++++++++++++++++++++                | 68% ~26s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~24s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~23s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~22s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~21s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~21s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~20s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~19s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~18s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~17s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 17s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 44s      
   |++                                                | 2 % ~03m 06s      
   |++                                                | 3 % ~02m 50s      
   |+++                                               | 4 % ~02m 43s      
   |+++                                               | 5 % ~02m 34s      
   |++++                                              | 6 % ~02m 30s      
   |++++                                              | 7 % ~02m 28s      
   |+++++                                             | 8 % ~02m 24s      
   |+++++                                             | 9 % ~02m 20s      
   |++++++                                            | 10% ~02m 18s      
   |++++++                                            | 11% ~02m 17s      
   |+++++++                                           | 12% ~02m 16s      
   |+++++++                                           | 13% ~02m 21s      
   |++++++++                                          | 14% ~02m 21s      
   |++++++++                                          | 15% ~02m 20s      
   |+++++++++                                         | 16% ~02m 22s      
   |+++++++++                                         | 17% ~02m 19s      
   |++++++++++                                        | 18% ~02m 15s      
   |++++++++++                                        | 19% ~02m 12s      
   |+++++++++++                                       | 20% ~02m 09s      
   |+++++++++++                                       | 21% ~02m 07s      
   |++++++++++++                                      | 22% ~02m 05s      
   |++++++++++++                                      | 23% ~02m 02s      
   |+++++++++++++                                     | 24% ~02m 00s      
   |+++++++++++++                                     | 25% ~01m 58s      
   |++++++++++++++                                    | 26% ~01m 57s      
   |++++++++++++++                                    | 27% ~01m 58s      
   |+++++++++++++++                                   | 28% ~01m 56s      
   |+++++++++++++++                                   | 29% ~01m 53s      
   |++++++++++++++++                                  | 30% ~01m 51s      
   |++++++++++++++++                                  | 31% ~01m 49s      
   |+++++++++++++++++                                 | 32% ~01m 47s      
   |+++++++++++++++++                                 | 33% ~01m 45s      
   |++++++++++++++++++                                | 34% ~01m 43s      
   |++++++++++++++++++                                | 35% ~01m 42s      
   |+++++++++++++++++++                               | 36% ~01m 40s      
   |+++++++++++++++++++                               | 37% ~01m 50s      
   |++++++++++++++++++++                              | 38% ~01m 48s      
   |++++++++++++++++++++                              | 39% ~01m 45s      
   |+++++++++++++++++++++                             | 40% ~01m 43s      
   |+++++++++++++++++++++                             | 41% ~01m 40s      
   |++++++++++++++++++++++                            | 42% ~01m 38s      
   |++++++++++++++++++++++                            | 43% ~01m 35s      
   |+++++++++++++++++++++++                           | 44% ~01m 33s      
   |+++++++++++++++++++++++                           | 45% ~01m 31s      
   |++++++++++++++++++++++++                          | 46% ~01m 29s      
   |++++++++++++++++++++++++                          | 47% ~01m 27s      
   |+++++++++++++++++++++++++                         | 48% ~01m 25s      
   |+++++++++++++++++++++++++                         | 49% ~01m 23s      
   |++++++++++++++++++++++++++                        | 51% ~01m 21s      
   |++++++++++++++++++++++++++                        | 52% ~01m 19s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 17s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 15s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 13s      
   |++++++++++++++++++++++++++++                      | 56% ~01m 12s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 10s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 08s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 06s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 04s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 03s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 01s      
   |++++++++++++++++++++++++++++++++                  | 63% ~60s          
   |++++++++++++++++++++++++++++++++                  | 64% ~59s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~57s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~55s          
   |++++++++++++++++++++++++++++++++++                | 67% ~54s          
   |++++++++++++++++++++++++++++++++++                | 68% ~52s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~50s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~48s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~47s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~45s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~43s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~41s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~40s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~38s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~37s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~35s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~34s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~30s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~25s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~22s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 39s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 15s      
   |++                                                | 2 % ~03m 14s      
   |++                                                | 3 % ~03m 15s      
   |+++                                               | 4 % ~02m 57s      
   |+++                                               | 5 % ~02m 45s      
   |++++                                              | 6 % ~02m 37s      
   |++++                                              | 7 % ~02m 31s      
   |+++++                                             | 9 % ~02m 26s      
   |+++++                                             | 10% ~02m 21s      
   |++++++                                            | 11% ~02m 18s      
   |++++++                                            | 12% ~02m 16s      
   |+++++++                                           | 13% ~02m 15s      
   |+++++++                                           | 14% ~02m 12s      
   |++++++++                                          | 15% ~02m 10s      
   |++++++++                                          | 16% ~02m 08s      
   |+++++++++                                         | 17% ~02m 07s      
   |++++++++++                                        | 18% ~02m 06s      
   |++++++++++                                        | 19% ~02m 04s      
   |+++++++++++                                       | 20% ~02m 03s      
   |+++++++++++                                       | 21% ~02m 00s      
   |++++++++++++                                      | 22% ~02m 01s      
   |++++++++++++                                      | 23% ~01m 59s      
   |+++++++++++++                                     | 24% ~02m 01s      
   |+++++++++++++                                     | 26% ~01m 58s      
   |++++++++++++++                                    | 27% ~01m 56s      
   |++++++++++++++                                    | 28% ~01m 53s      
   |+++++++++++++++                                   | 29% ~01m 51s      
   |+++++++++++++++                                   | 30% ~01m 48s      
   |++++++++++++++++                                  | 31% ~01m 46s      
   |++++++++++++++++                                  | 32% ~01m 44s      
   |+++++++++++++++++                                 | 33% ~01m 42s      
   |++++++++++++++++++                                | 34% ~01m 39s      
   |++++++++++++++++++                                | 35% ~01m 38s      
   |+++++++++++++++++++                               | 36% ~01m 36s      
   |+++++++++++++++++++                               | 37% ~01m 34s      
   |++++++++++++++++++++                              | 38% ~01m 32s      
   |++++++++++++++++++++                              | 39% ~01m 30s      
   |+++++++++++++++++++++                             | 40% ~01m 28s      
   |+++++++++++++++++++++                             | 41% ~01m 28s      
   |++++++++++++++++++++++                            | 43% ~01m 26s      
   |++++++++++++++++++++++                            | 44% ~01m 24s      
   |+++++++++++++++++++++++                           | 45% ~01m 22s      
   |+++++++++++++++++++++++                           | 46% ~01m 20s      
   |++++++++++++++++++++++++                          | 47% ~01m 19s      
   |++++++++++++++++++++++++                          | 48% ~01m 17s      
   |+++++++++++++++++++++++++                         | 49% ~01m 16s      
   |+++++++++++++++++++++++++                         | 50% ~01m 16s      
   |++++++++++++++++++++++++++                        | 51% ~01m 15s      
   |+++++++++++++++++++++++++++                       | 52% ~01m 13s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 16s      
   |++++++++++++++++++++++++++++                      | 54% ~01m 16s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 15s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 14s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 12s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 11s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 10s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 16s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 14s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 11s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 09s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 07s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 05s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 03s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 01s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~59s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~57s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~55s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~53s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~51s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~49s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~47s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~45s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~43s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~41s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~39s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~37s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~35s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~31s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~25s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~23s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 12s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~22s          
   |++                                                | 3 % ~20s          
   |++                                                | 4 % ~19s          
   |+++                                               | 5 % ~19s          
   |++++                                              | 6 % ~20s          
   |++++                                              | 8 % ~21s          
   |+++++                                             | 9 % ~21s          
   |++++++                                            | 10% ~01m 11s      
   |++++++                                            | 12% ~01m 05s      
   |+++++++                                           | 13% ~60s          
   |++++++++                                          | 14% ~55s          
   |++++++++                                          | 16% ~51s          
   |+++++++++                                         | 17% ~48s          
   |++++++++++                                        | 18% ~44s          
   |++++++++++                                        | 19% ~42s          
   |+++++++++++                                       | 21% ~39s          
   |++++++++++++                                      | 22% ~37s          
   |++++++++++++                                      | 23% ~36s          
   |+++++++++++++                                     | 25% ~35s          
   |+++++++++++++                                     | 26% ~33s          
   |++++++++++++++                                    | 27% ~32s          
   |+++++++++++++++                                   | 29% ~31s          
   |+++++++++++++++                                   | 30% ~30s          
   |++++++++++++++++                                  | 31% ~29s          
   |+++++++++++++++++                                 | 32% ~29s          
   |+++++++++++++++++                                 | 34% ~28s          
   |++++++++++++++++++                                | 35% ~27s          
   |+++++++++++++++++++                               | 36% ~26s          
   |+++++++++++++++++++                               | 38% ~25s          
   |++++++++++++++++++++                              | 39% ~25s          
   |+++++++++++++++++++++                             | 40% ~24s          
   |+++++++++++++++++++++                             | 42% ~24s          
   |++++++++++++++++++++++                            | 43% ~24s          
   |+++++++++++++++++++++++                           | 44% ~23s          
   |+++++++++++++++++++++++                           | 45% ~23s          
   |++++++++++++++++++++++++                          | 47% ~22s          
   |+++++++++++++++++++++++++                         | 48% ~22s          
   |+++++++++++++++++++++++++                         | 49% ~22s          
   |++++++++++++++++++++++++++                        | 51% ~21s          
   |++++++++++++++++++++++++++                        | 52% ~20s          
   |+++++++++++++++++++++++++++                       | 53% ~20s          
   |++++++++++++++++++++++++++++                      | 55% ~19s          
   |++++++++++++++++++++++++++++                      | 56% ~19s          
   |+++++++++++++++++++++++++++++                     | 57% ~18s          
   |++++++++++++++++++++++++++++++                    | 58% ~17s          
   |++++++++++++++++++++++++++++++                    | 60% ~17s          
   |+++++++++++++++++++++++++++++++                   | 61% ~16s          
   |++++++++++++++++++++++++++++++++                  | 62% ~15s          
   |++++++++++++++++++++++++++++++++                  | 64% ~15s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~14s          
   |++++++++++++++++++++++++++++++++++                | 66% ~14s          
   |++++++++++++++++++++++++++++++++++                | 68% ~13s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~12s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~12s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~11s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~10s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~10s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~09s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 41s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06m 27s      
   |++                                                | 2 % ~04m 57s      
   |++                                                | 3 % ~04m 28s      
   |+++                                               | 4 % ~04m 31s      
   |+++                                               | 5 % ~04m 08s      
   |++++                                              | 6 % ~04m 00s      
   |++++                                              | 7 % ~03m 56s      
   |+++++                                             | 8 % ~03m 43s      
   |+++++                                             | 9 % ~03m 31s      
   |++++++                                            | 10% ~03m 22s      
   |++++++                                            | 11% ~03m 16s      
   |+++++++                                           | 12% ~03m 15s      
   |+++++++                                           | 13% ~03m 11s      
   |++++++++                                          | 14% ~03m 07s      
   |++++++++                                          | 15% ~03m 04s      
   |+++++++++                                         | 16% ~03m 00s      
   |+++++++++                                         | 18% ~03m 02s      
   |++++++++++                                        | 19% ~03m 02s      
   |++++++++++                                        | 20% ~02m 58s      
   |+++++++++++                                       | 21% ~02m 59s      
   |+++++++++++                                       | 22% ~03m 02s      
   |++++++++++++                                      | 23% ~03m 01s      
   |++++++++++++                                      | 24% ~02m 55s      
   |+++++++++++++                                     | 25% ~02m 50s      
   |+++++++++++++                                     | 26% ~02m 46s      
   |++++++++++++++                                    | 27% ~02m 44s      
   |++++++++++++++                                    | 28% ~02m 43s      
   |+++++++++++++++                                   | 29% ~02m 39s      
   |+++++++++++++++                                   | 30% ~02m 46s      
   |++++++++++++++++                                  | 31% ~02m 43s      
   |++++++++++++++++                                  | 32% ~02m 43s      
   |+++++++++++++++++                                 | 33% ~02m 49s      
   |++++++++++++++++++                                | 34% ~02m 44s      
   |++++++++++++++++++                                | 35% ~02m 39s      
   |+++++++++++++++++++                               | 36% ~02m 34s      
   |+++++++++++++++++++                               | 37% ~02m 30s      
   |++++++++++++++++++++                              | 38% ~02m 25s      
   |++++++++++++++++++++                              | 39% ~02m 21s      
   |+++++++++++++++++++++                             | 40% ~02m 17s      
   |+++++++++++++++++++++                             | 41% ~02m 13s      
   |++++++++++++++++++++++                            | 42% ~02m 11s      
   |++++++++++++++++++++++                            | 43% ~02m 12s      
   |+++++++++++++++++++++++                           | 44% ~02m 15s      
   |+++++++++++++++++++++++                           | 45% ~02m 11s      
   |++++++++++++++++++++++++                          | 46% ~02m 07s      
   |++++++++++++++++++++++++                          | 47% ~02m 03s      
   |+++++++++++++++++++++++++                         | 48% ~01m 59s      
   |+++++++++++++++++++++++++                         | 49% ~01m 56s      
   |++++++++++++++++++++++++++                        | 51% ~01m 53s      
   |++++++++++++++++++++++++++                        | 52% ~01m 49s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 46s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 43s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 42s      
   |++++++++++++++++++++++++++++                      | 56% ~01m 39s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 37s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 34s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 32s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 29s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 26s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 23s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 21s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 18s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 15s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 13s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 10s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 08s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 06s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~01m 04s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 01s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~58s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~56s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~53s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~51s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~49s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~46s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~44s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~42s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~39s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~37s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~35s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~31s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 13s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 43s      
   |++                                                | 2 % ~03m 13s      
   |++                                                | 3 % ~03m 02s      
   |+++                                               | 4 % ~02m 54s      
   |+++                                               | 5 % ~02m 49s      
   |++++                                              | 7 % ~02m 44s      
   |++++                                              | 8 % ~02m 40s      
   |+++++                                             | 9 % ~02m 37s      
   |+++++                                             | 10% ~02m 35s      
   |++++++                                            | 11% ~02m 33s      
   |++++++                                            | 12% ~02m 32s      
   |+++++++                                           | 13% ~02m 30s      
   |++++++++                                          | 14% ~02m 40s      
   |++++++++                                          | 15% ~02m 41s      
   |+++++++++                                         | 16% ~03m 04s      
   |+++++++++                                         | 17% ~02m 58s      
   |++++++++++                                        | 18% ~02m 53s      
   |++++++++++                                        | 20% ~02m 49s      
   |+++++++++++                                       | 21% ~02m 46s      
   |+++++++++++                                       | 22% ~02m 42s      
   |++++++++++++                                      | 23% ~02m 38s      
   |++++++++++++                                      | 24% ~02m 35s      
   |+++++++++++++                                     | 25% ~02m 32s      
   |++++++++++++++                                    | 26% ~02m 28s      
   |++++++++++++++                                    | 27% ~02m 25s      
   |+++++++++++++++                                   | 28% ~02m 22s      
   |+++++++++++++++                                   | 29% ~02m 21s      
   |++++++++++++++++                                  | 30% ~02m 21s      
   |++++++++++++++++                                  | 32% ~02m 18s      
   |+++++++++++++++++                                 | 33% ~02m 17s      
   |+++++++++++++++++                                 | 34% ~02m 15s      
   |++++++++++++++++++                                | 35% ~02m 12s      
   |++++++++++++++++++                                | 36% ~02m 10s      
   |+++++++++++++++++++                               | 37% ~02m 09s      
   |++++++++++++++++++++                              | 38% ~02m 08s      
   |++++++++++++++++++++                              | 39% ~02m 08s      
   |+++++++++++++++++++++                             | 40% ~02m 05s      
   |+++++++++++++++++++++                             | 41% ~02m 04s      
   |++++++++++++++++++++++                            | 42% ~02m 01s      
   |++++++++++++++++++++++                            | 43% ~01m 59s      
   |+++++++++++++++++++++++                           | 45% ~01m 57s      
   |+++++++++++++++++++++++                           | 46% ~01m 56s      
   |++++++++++++++++++++++++                          | 47% ~01m 58s      
   |++++++++++++++++++++++++                          | 48% ~01m 55s      
   |+++++++++++++++++++++++++                         | 49% ~01m 52s      
   |+++++++++++++++++++++++++                         | 50% ~01m 49s      
   |++++++++++++++++++++++++++                        | 51% ~01m 47s      
   |+++++++++++++++++++++++++++                       | 52% ~01m 44s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 41s      
   |++++++++++++++++++++++++++++                      | 54% ~01m 38s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 36s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 33s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 33s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 32s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 30s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 27s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 24s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 22s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~01m 19s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 17s      
   |++++++++++++++++++++++++++++++++++                | 66% ~01m 14s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 12s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 10s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~01m 07s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 05s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 02s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~60s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~57s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~55s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~52s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~50s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~47s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~45s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~43s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~40s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~38s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 38s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~02m 37s      
   |++                                                | 2 % ~02m 29s      
   |++                                                | 3 % ~03m 20s      
   |+++                                               | 4 % ~03m 04s      
   |+++                                               | 5 % ~02m 59s      
   |++++                                              | 7 % ~02m 49s      
   |++++                                              | 8 % ~02m 40s      
   |+++++                                             | 9 % ~02m 32s      
   |+++++                                             | 10% ~02m 27s      
   |++++++                                            | 11% ~02m 26s      
   |+++++++                                           | 12% ~02m 21s      
   |+++++++                                           | 13% ~02m 17s      
   |++++++++                                          | 14% ~02m 17s      
   |++++++++                                          | 15% ~02m 12s      
   |+++++++++                                         | 16% ~02m 09s      
   |+++++++++                                         | 18% ~02m 06s      
   |++++++++++                                        | 19% ~02m 03s      
   |++++++++++                                        | 20% ~02m 00s      
   |+++++++++++                                       | 21% ~01m 58s      
   |+++++++++++                                       | 22% ~01m 55s      
   |++++++++++++                                      | 23% ~01m 53s      
   |+++++++++++++                                     | 24% ~01m 52s      
   |+++++++++++++                                     | 25% ~01m 50s      
   |++++++++++++++                                    | 26% ~01m 48s      
   |++++++++++++++                                    | 27% ~01m 47s      
   |+++++++++++++++                                   | 29% ~01m 46s      
   |+++++++++++++++                                   | 30% ~01m 45s      
   |++++++++++++++++                                  | 31% ~01m 43s      
   |++++++++++++++++                                  | 32% ~01m 43s      
   |+++++++++++++++++                                 | 33% ~01m 41s      
   |++++++++++++++++++                                | 34% ~01m 41s      
   |++++++++++++++++++                                | 35% ~01m 40s      
   |+++++++++++++++++++                               | 36% ~01m 39s      
   |+++++++++++++++++++                               | 37% ~01m 37s      
   |++++++++++++++++++++                              | 38% ~01m 35s      
   |++++++++++++++++++++                              | 40% ~01m 33s      
   |+++++++++++++++++++++                             | 41% ~01m 32s      
   |+++++++++++++++++++++                             | 42% ~01m 31s      
   |++++++++++++++++++++++                            | 43% ~01m 31s      
   |++++++++++++++++++++++                            | 44% ~01m 30s      
   |+++++++++++++++++++++++                           | 45% ~01m 28s      
   |++++++++++++++++++++++++                          | 46% ~01m 27s      
   |++++++++++++++++++++++++                          | 47% ~01m 26s      
   |+++++++++++++++++++++++++                         | 48% ~01m 24s      
   |+++++++++++++++++++++++++                         | 49% ~01m 22s      
   |++++++++++++++++++++++++++                        | 51% ~01m 21s      
   |++++++++++++++++++++++++++                        | 52% ~01m 19s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 17s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 19s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 17s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 15s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 13s      
   |++++++++++++++++++++++++++++++                    | 58% ~01m 12s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 10s      
   |+++++++++++++++++++++++++++++++                   | 60% ~01m 08s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 06s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 04s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 02s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~60s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~58s          
   |++++++++++++++++++++++++++++++++++                | 67% ~56s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~54s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~52s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~50s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~48s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~46s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~44s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~42s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~40s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~38s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~37s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~22s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 02m 43s
# call library dplyr to use some of its functions
library(dplyr)
package ‘dplyr’ was built under R version 3.5.1
Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
# group by cluster using group_by function and show top 5 results using top_n function
pbmc.markers.grouped <- group_by(pbmc.markers, cluster)
pbmc.markers.grouped.top <- top_n(pbmc.markers.grouped, 5, avg_logFC)
# convert it to a matrix for downstream applications (trust me)
pbmc.markers.grouped.top <- as.matrix(pbmc.markers.grouped.top)
print(pbmc.markers.grouped.top)
      p_val           avg_logFC  pct.1   pct.2   p_val_adj       cluster gene      
 [1,] " 0.000000e+00" "1.360231" "0.688" "0.181" " 0.000000e+00" "0"     "LTB"     
 [2,] " 0.000000e+00" "1.247725" "0.678" "0.224" " 0.000000e+00" "0"     "LDHB"    
 [3,] " 0.000000e+00" "1.236988" "0.446" "0.104" " 0.000000e+00" "0"     "SELL"    
 [4,] " 0.000000e+00" "1.151767" "0.962" "0.783" " 0.000000e+00" "0"     "PABPC1"  
 [5,] " 0.000000e+00" "1.059882" "0.445" "0.125" " 0.000000e+00" "0"     "IL7R"    
 [6,] " 0.000000e+00" "2.965944" "0.852" "0.050" " 0.000000e+00" "1"     "S100A8"  
 [7,] " 0.000000e+00" "2.926204" "0.468" "0.038" " 0.000000e+00" "1"     "CCL2"    
 [8,] " 0.000000e+00" "2.769285" "0.880" "0.091" " 0.000000e+00" "1"     "IL8"     
 [9,] " 0.000000e+00" "2.730468" "0.762" "0.043" " 0.000000e+00" "1"     "S100A9"  
[10,] " 0.000000e+00" "2.405877" "1.000" "0.872" " 0.000000e+00" "1"     "FTL"     
[11,] " 0.000000e+00" "2.144159" "0.478" "0.032" " 0.000000e+00" "2"     "GZMH"    
[12,] " 0.000000e+00" "2.072391" "0.861" "0.126" " 0.000000e+00" "2"     "CCL5"    
[13,] " 0.000000e+00" "1.651099" "0.402" "0.038" " 0.000000e+00" "2"     "CD8A"    
[14,] " 0.000000e+00" "1.572040" "0.743" "0.107" " 0.000000e+00" "2"     "NKG7"    
[15,] " 0.000000e+00" "1.562925" "0.554" "0.082" " 0.000000e+00" "2"     "GZMB"    
[16,] " 0.000000e+00" "2.869341" "0.814" "0.020" " 0.000000e+00" "3"     "CD79A"   
[17,] " 0.000000e+00" "2.139385" "0.519" "0.009" " 0.000000e+00" "3"     "MS4A1"   
[18,] " 0.000000e+00" "2.132632" "0.998" "0.503" " 0.000000e+00" "3"     "CD74"    
[19,] " 0.000000e+00" "1.783456" "0.527" "0.077" " 0.000000e+00" "3"     "CD83"    
[20,] " 0.000000e+00" "1.776907" "0.401" "0.012" " 0.000000e+00" "3"     "CD79B"   
[21,] " 0.000000e+00" "3.521768" "0.945" "0.070" " 0.000000e+00" "4"     "GNLY"    
[22,] " 0.000000e+00" "2.607033" "0.950" "0.111" " 0.000000e+00" "4"     "NKG7"    
[23,] " 0.000000e+00" "2.490249" "0.845" "0.075" " 0.000000e+00" "4"     "GZMB"    
[24,] " 0.000000e+00" "2.446398" "0.569" "0.025" " 0.000000e+00" "4"     "CLIC3"   
[25,] " 0.000000e+00" "2.242966" "0.520" "0.042" " 0.000000e+00" "4"     "FGFBP2"  
[26,] " 0.000000e+00" "2.900754" "0.620" "0.036" " 0.000000e+00" "5"     "VMO1"    
[27,] " 0.000000e+00" "2.344538" "0.269" "0.006" " 0.000000e+00" "5"     "CXCL10"  
[28,] " 0.000000e+00" "2.296334" "0.841" "0.129" " 0.000000e+00" "5"     "FCGR3A"  
[29,] " 0.000000e+00" "2.146760" "0.824" "0.111" " 0.000000e+00" "5"     "MS4A7"   
[30,] " 0.000000e+00" "1.830722" "0.698" "0.067" " 0.000000e+00" "5"     "IFITM3"  
[31,] "2.858001e-294" "2.183459" "0.487" "0.067" "3.868876e-290" "6"     "HSPH1"   
[32,] "2.541939e-202" "2.142275" "0.677" "0.218" "3.441023e-198" "6"     "CACYBP"  
[33,] "8.179524e-148" "1.961616" "0.362" "0.070" "1.107262e-143" "6"     "DNAJB1"  
[34,] "2.725095e-146" "2.582634" "0.478" "0.134" "3.688962e-142" "6"     "HSPB1"   
[35,] " 2.001307e-90" "2.390347" "0.344" "0.098" " 2.709169e-86" "6"     "HSPA1A"  
[36,] " 0.000000e+00" "3.547369" "0.714" "0.032" " 0.000000e+00" "7"     "PPBP"    
[37,] " 0.000000e+00" "2.581009" "0.522" "0.007" " 0.000000e+00" "7"     "PF4"     
[38,] " 0.000000e+00" "2.513364" "0.528" "0.012" " 0.000000e+00" "7"     "GNG11"   
[39,] " 0.000000e+00" "2.213129" "0.457" "0.007" " 0.000000e+00" "7"     "SDPR"    
[40,] " 0.000000e+00" "1.827362" "0.298" "0.002" " 0.000000e+00" "7"     "TUBB1"   
[41,] " 0.000000e+00" "2.375324" "0.934" "0.118" " 0.000000e+00" "8"     "HLA-DQA1"
[42,] "4.022389e-211" "2.344441" "0.985" "0.303" "5.445108e-207" "8"     "HLA-DPA1"
[43,] "3.958257e-187" "2.249284" "0.996" "0.413" "5.358293e-183" "8"     "HLA-DRA" 
[44,] "4.185786e-176" "2.420208" "0.865" "0.219" "5.666298e-172" "8"     "LYZ"     
[45,] "2.606548e-143" "2.736058" "0.894" "0.262" "3.528484e-139" "8"     "TXN"     
[46,] " 0.000000e+00" "3.082401" "0.797" "0.015" " 0.000000e+00" "9"     "MIR155HG"
[47,] " 0.000000e+00" "2.140877" "0.758" "0.025" " 0.000000e+00" "9"     "NME1"    
[48,] "9.557452e-207" "2.246809" "0.922" "0.126" "1.293792e-202" "9"     "HLA-DQA1"
[49,] "2.175653e-183" "1.924433" "0.843" "0.110" "2.945181e-179" "9"     "CD83"    
[50,] "2.271334e-143" "2.287105" "0.673" "0.089" "3.074705e-139" "9"     "MYC"     
[51,] " 0.000000e+00" "6.778140" "1.000" "0.017" " 0.000000e+00" "10"    "HBA2"    
[52,] " 0.000000e+00" "6.221867" "1.000" "0.010" " 0.000000e+00" "10"    "HBA1"    
[53,] " 0.000000e+00" "2.675141" "0.780" "0.000" " 0.000000e+00" "10"    "ALAS2"   
[54,] "2.298284e-175" "2.029726" "0.780" "0.028" "3.111187e-171" "10"    "SNCA"    
[55,] "5.222162e-117" "7.546049" "1.000" "0.081" "7.069241e-113" "10"    "HBB"     
# What about using a different test?  On your own time, trying adding the argument test.use = "roc" and see how different your results are. 

Visualize differentially expressed genes

# The list of DE genes is long and it would be too much information to visualize them all. So, let's plot the top 5 features (genes) for each cluster.  You could do this using a for loop, but let's keep it simple.
# First, isolate the top 5 DE genes for each cluster.
cluster_0 <- which(pbmc.markers.grouped.top[,"cluster"] == 0)
cluster_1 <- which(pbmc.markers.grouped.top[,"cluster"] == 1)
cluster_2 <- which(pbmc.markers.grouped.top[,"cluster"] == 2)
cluster_3 <- which(pbmc.markers.grouped.top[,"cluster"] == 3)
cluster_4 <- which(pbmc.markers.grouped.top[,"cluster"] == 4)
cluster_5 <- which(pbmc.markers.grouped.top[,"cluster"] == 5)
cluster_6 <- which(pbmc.markers.grouped.top[,"cluster"] == 6)
cluster_7 <- which(pbmc.markers.grouped.top[,"cluster"] == 7)
cluster_8 <- which(pbmc.markers.grouped.top[,"cluster"] == 8)
cluster_9 <- which(pbmc.markers.grouped.top[,"cluster"] == 9)
cluster_10 <- which(pbmc.markers.grouped.top[,"cluster"] == 10)
# 3 options for visualization...
# 1. Violin plots
# if you want to see the points, insert point.size.use = 0.1 into the argument list
# # specify cluster 0 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_0, "gene"],
        point.size.use = 0)

# # specify cluster 1 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_1, "gene"],
        point.size.use = 0)

# # specify cluster 2 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_2, "gene"],
        point.size.use = 0)

# # specify cluster 3 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_3, "gene"],
        point.size.use = 0)

# # specify cluster 4 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_4, "gene"],
        point.size.use = 0)

# # specify cluster 5 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_5, "gene"],
        point.size.use = 0)

# # specify cluster 6 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_6, "gene"],
        point.size.use = 0)

# # specify cluster 7 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_7, "gene"],
        point.size.use = 0)

# # specify cluster 8 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_8, "gene"],
        point.size.use = 0)

# # specify cluster 9 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_9, "gene"],
        point.size.use = 0)

# # specify cluster 10 here
VlnPlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_10, "gene"],
        point.size.use = 0)

# 2. Feature plot
# here, use t-SNE for dim reduction
# Notes 
# You could change the reduction.use to do PCA or ICA instead of t-SNE, but since we know where our clusters were mapped in the context of t-SNE, this makes the most sense for us.
# Cluster 0
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_0, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 1
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_1, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 2
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_2, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 3
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_3, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 4
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_4, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 5
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_5, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 6
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_6, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 7
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_7, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 8
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_8, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 9
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_9, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# Cluster 10
FeaturePlot(object = pbmc, features.plot = pbmc.markers.grouped.top[cluster_10, "gene"], cols.use = c("grey", "blue"), reduction.use = "tsne")

# 3. Heatmap
# Heatmaps have enough room to show you the top 5 (or more!) genes for each cluster.  Let's do the top 5, but if you have time, try changing the top features to 10 or more.
# All clusters
DoHeatmap(object = pbmc, genes.use = pbmc.markers.grouped.top[ , "gene"], slim.col.label = TRUE, remove.key = TRUE)

Save the object

# save this work and come back to it later
# <><><><><><> !!! <><><><><><>
saveRDS(pbmc, file = paste(directory, "/pbmc_only.rds", sep = ""))

STOPPING POINT

Now let’s add in a second dataset, which is PBMCs stimulated with interferon gamma

# You will need to change it to the directory where you have the file on your computer
# stim.data <- read.table("/Users/paigevega/Desktop/CQS_2018_DataScienceBiomedicalResearch/immune_stimulated_expression_matrix.txt.gz", sep = "\t")
stim.data <- read.table(paste(directory, "/immune_stimulated_expression_matrix.txt.gz", sep = ""), sep = "\t")
# create the Seurat object for the stimulated PBMCs
stim <- CreateSeuratObject(raw.data = stim.data, min.cells = 5, project = "stim_PBMC")
# Also re-create the control PBMC object because we will change a couple things this time and we don't want to have the previous info stored in the Seurat object.
pbmc <- CreateSeuratObject(raw.data = pbmc.data, min.cells = 5, project = "control_PBMC")

We have a few goals in this section of the analysis.

1. identify cell types present in both the control pbmc and stimulated pbmc datasets

2. find markers that identify cell types that are conserved in control and stimulated pbmcs

3. compare the datasets to find cell-type specific responses to interferon stimulation

Really, the goal is to reinforce the major steps in scRNA-seq analysis by going over some of them again. This time, we show how even a simple experimental design (control vs stimulated) can complicate the analysis.

Filtering, normalization, scaling, and find HVGs

VlnPlot(object = stim, features.plot = c("nGene", "nUMI"), nCol = 2, point.size.use = 0.001)

GenePlot(object = stim, gene1 = "nUMI", gene2 = "nGene")

# Filter out the stimulated pbmcs with low total gene expression
stim <- FilterCells(object = stim, subset.names = "nGene", low.thresholds = 500, high.thresholds = 1800)
# normalize
stim <- NormalizeData(stim)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# scale
stim <- ScaleData(stim)
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |======                                                                            |   7%
  |                                                                                        
  |============                                                                      |  14%
  |                                                                                        
  |==================                                                                |  21%
  |                                                                                        
  |=======================                                                           |  29%
  |                                                                                        
  |=============================                                                     |  36%
  |                                                                                        
  |===================================                                               |  43%
  |                                                                                        
  |=========================================                                         |  50%
  |                                                                                        
  |===============================================                                   |  57%
  |                                                                                        
  |=====================================================                             |  64%
  |                                                                                        
  |===========================================================                       |  71%
  |                                                                                        
  |================================================================                  |  79%
  |                                                                                        
  |======================================================================            |  86%
  |                                                                                        
  |============================================================================      |  93%
  |                                                                                        
  |==================================================================================| 100%
# Find variable genes
stim <-FindVariableGenes(stim)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# make metadata indicating it is stimulated
stim@meta.data$stim <- "STIM"
# yes, we already did this for the control dataset, but the downstream analysis requires a bit more selective filtering for it to run.  The only changes we are making is choosing cells with 500-1800 genes instead of 200-1800 genes.
pbmc <- FilterCells(object = pbmc, subset.names = "nGene", low.thresholds = 500, high.thresholds = 1800)
# normalize
pbmc <- NormalizeData(pbmc)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# scale
pbmc <- ScaleData(pbmc)
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |======                                                                            |   7%
  |                                                                                        
  |============                                                                      |  14%
  |                                                                                        
  |==================                                                                |  21%
  |                                                                                        
  |=======================                                                           |  29%
  |                                                                                        
  |=============================                                                     |  36%
  |                                                                                        
  |===================================                                               |  43%
  |                                                                                        
  |=========================================                                         |  50%
  |                                                                                        
  |===============================================                                   |  57%
  |                                                                                        
  |=====================================================                             |  64%
  |                                                                                        
  |===========================================================                       |  71%
  |                                                                                        
  |================================================================                  |  79%
  |                                                                                        
  |======================================================================            |  86%
  |                                                                                        
  |============================================================================      |  93%
  |                                                                                        
  |==================================================================================| 100%
# Find variable genes
pbmc <-FindVariableGenes(pbmc)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

# make metadata indicating it is stimulated
pbmc@meta.data$stim <- "CTRL"
# Calculates average expression and dispersion, using z-scores to determine outliers, which accounts for the relationship between variability and avg expression.
# Now find the highly variable genes that are shared between the two datasets (control and stimulated)
g.1 <- head(rownames(pbmc@hvg.info), 1000)
g.2 <- head(rownames(stim@hvg.info), 1000)
# keeps only unique genenames (gets rid of duplicates)
genes.use <- unique(c(g.1, g.2))
genes.use <- intersect(genes.use, rownames(pbmc@scale.data))
genes.use <- intersect(genes.use, rownames(stim@scale.data))

Canonical Correlation Analysis (CCA)

# Run CCA
  # Insert some info to describe CCA.
immune.combined <- RunCCA(pbmc, stim, genes.use = genes.use, num.cc = 30)
Running CCA
Merging objects
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |=====                                                                             |   7%
  |                                                                                        
  |===========                                                                       |  13%
  |                                                                                        
  |================                                                                  |  20%
  |                                                                                        
  |======================                                                            |  27%
  |                                                                                        
  |===========================                                                       |  33%
  |                                                                                        
  |=================================                                                 |  40%
  |                                                                                        
  |======================================                                            |  47%
  |                                                                                        
  |============================================                                      |  53%
  |                                                                                        
  |=================================================                                 |  60%
  |                                                                                        
  |=======================================================                           |  67%
  |                                                                                        
  |============================================================                      |  73%
  |                                                                                        
  |==================================================================                |  80%
  |                                                                                        
  |=======================================================================           |  87%
  |                                                                                        
  |=============================================================================     |  93%
  |                                                                                        
  |==================================================================================| 100%
# Visualize CCA results
  # plot CC1 vs CC2
p1 <- DimPlot(object = immune.combined, reduction.use = "cca", group.by = "stim", pt.size = 0.5, do.return = TRUE)
  # violin plot to visualize CC1 and CC2
p2 <- VlnPlot(object = immune.combined, features.plot = "CC1", group.by = "stim", do.return = TRUE, point.size.use = 0.001)
p3 <- VlnPlot(object = immune.combined, features.plot = "CC2", group.by = "stim", do.return = TRUE, point.size.use = 0.001)
plot(p1)

plot_grid(p2, p3)

Choose CCs

# Much like selecting the number of PCs to use in the first analysis, we must select the number of CCs to use here.  The MetagenBicorPlot function below is analogous to the elbow plot method used in the first analysis of 1 dataset.  You look for saturation (flatline).
# 2 ways to pick CCs, but we won't run the first because it takes too long to compute for the time we have in class.  Feel free to try it on your own!
# # 1.  MetageneBicorPlot
# p4 <- MetageneBicorPlot(immune.combined, grouping.var = "stim", dims.eval = 1:30, display.progress = TRUE)
p4
# 2. Heatmap - use the top 500 cells
  # you need three pages to see all the CCs
  # purple = low expression
  # yellow = high
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 1:9,
           do.balanced = TRUE)
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 10:18,
           do.balanced = TRUE)
DimHeatmap(object = immune.combined, reduction.type = "cca", cells.use = 500, dim.use = 19:30,
           do.balanced = TRUE)
# How many CCs do you think we should pick?

Align the CCA subspaces and visualize

# use the first 20 CCs to get a new dimension reduction that you can visualize and use for clustering
start.time3 <-Sys.time()
immune.combined <- AlignSubspace(immune.combined, reduction.type = "cca", grouping.var = "stim", 
                    dims.align = 1:20)
Rescaling group 1
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |=====                                                                             |   7%
  |                                                                                        
  |===========                                                                       |  13%
  |                                                                                        
  |================                                                                  |  20%
  |                                                                                        
  |======================                                                            |  27%
  |                                                                                        
  |===========================                                                       |  33%
  |                                                                                        
  |=================================                                                 |  40%
  |                                                                                        
  |======================================                                            |  47%
  |                                                                                        
  |============================================                                      |  53%
  |                                                                                        
  |=================================================                                 |  60%
  |                                                                                        
  |=======================================================                           |  67%
  |                                                                                        
  |============================================================                      |  73%
  |                                                                                        
  |==================================================================                |  80%
  |                                                                                        
  |=======================================================================           |  87%
  |                                                                                        
  |=============================================================================     |  93%
  |                                                                                        
  |==================================================================================| 100%
Rescaling group 2
Scaling data matrix

  |                                                                                        
  |                                                                                  |   0%
  |                                                                                        
  |=====                                                                             |   7%
  |                                                                                        
  |===========                                                                       |  13%
  |                                                                                        
  |================                                                                  |  20%
  |                                                                                        
  |======================                                                            |  27%
  |                                                                                        
  |===========================                                                       |  33%
  |                                                                                        
  |=================================                                                 |  40%
  |                                                                                        
  |======================================                                            |  47%
  |                                                                                        
  |============================================                                      |  53%
  |                                                                                        
  |=================================================                                 |  60%
  |                                                                                        
  |=======================================================                           |  67%
  |                                                                                        
  |============================================================                      |  73%
  |                                                                                        
  |==================================================================                |  80%
  |                                                                                        
  |=======================================================================           |  87%
  |                                                                                        
  |=============================================================================     |  93%
  |                                                                                        
  |==================================================================================| 100%
Aligning dimension 1

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07h 43m 24s  
   |+                                                 | 2 % ~06h 22m 07s  
   |++                                                | 3 % ~04h 43m 13s  
   |++                                                | 4 % ~03h 49m 52s  
   |+++                                               | 5 % ~03h 07m 05s  
   |+++                                               | 6 % ~02h 40m 04s  
   |++++                                              | 7 % ~02h 16m 42s  
   |++++                                              | 8 % ~01h 59m 04s  
   |+++++                                             | 9 % ~01h 45m 01s  
   |+++++                                             | 10% ~01h 33m 42s  
   |++++++                                            | 11% ~01h 24m 28s  
   |++++++                                            | 12% ~01h 16m 47s  
   |+++++++                                           | 13% ~01h 10m 16s  
   |+++++++                                           | 14% ~01h 04m 38s  
   |++++++++                                          | 15% ~59m 46s      
   |++++++++                                          | 16% ~55m 34s      
   |+++++++++                                         | 17% ~51m 52s      
   |+++++++++                                         | 18% ~49m 02s      
   |++++++++++                                        | 19% ~46m 04s      
   |++++++++++                                        | 20% ~44m 40s      
   |+++++++++++                                       | 21% ~42m 09s      
   |+++++++++++                                       | 22% ~39m 49s      
   |++++++++++++                                      | 23% ~37m 48s      
   |++++++++++++                                      | 24% ~36m 01s      
   |+++++++++++++                                     | 25% ~34m 21s      
   |+++++++++++++                                     | 26% ~32m 49s      
   |++++++++++++++                                    | 27% ~31m 20s      
   |++++++++++++++                                    | 28% ~29m 51s      
   |+++++++++++++++                                   | 29% ~28m 26s      
   |+++++++++++++++                                   | 30% ~27m 07s      
   |++++++++++++++++                                  | 31% ~25m 52s      
   |++++++++++++++++                                  | 32% ~24m 43s      
   |+++++++++++++++++                                 | 33% ~23m 37s      
   |+++++++++++++++++                                | 34% ~22m 36s      
   |++++++++++++++++++                                | 35% ~21m 40s      
   |++++++++++++++++++                                | 36% ~20m 45s      
   |+++++++++++++++++++                               | 37% ~19m 53s      
   |+++++++++++++++++++                               | 38% ~19m 04s      
   |++++++++++++++++++++                              | 39% ~18m 17s      
   |++++++++++++++++++++                              | 40% ~17m 32s      
   |+++++++++++++++++++++                             | 41% ~16m 50s      
   |+++++++++++++++++++++                             | 42% ~16m 10s      
   |++++++++++++++++++++++                            | 43% ~15m 32s      
   |++++++++++++++++++++++                            | 44% ~14m 55s      
   |+++++++++++++++++++++++                           | 45% ~14m 21s      
   |+++++++++++++++++++++++                           | 46% ~13m 49s      
   |++++++++++++++++++++++++                          | 47% ~13m 19s      
   |++++++++++++++++++++++++                          | 48% ~12m 50s      
   |+++++++++++++++++++++++++                         | 49% ~12m 21s      
   |+++++++++++++++++++++++++                         | 50% ~11m 54s      
   |++++++++++++++++++++++++++                        | 51% ~11m 27s      
   |++++++++++++++++++++++++++                        | 52% ~11m 01s      
   |+++++++++++++++++++++++++++                       | 53% ~10m 36s      
   |+++++++++++++++++++++++++++                       | 54% ~10m 12s      
   |++++++++++++++++++++++++++++                      | 55% ~09m 48s      
   |++++++++++++++++++++++++++++                     | 56% ~09m 26s      
   |+++++++++++++++++++++++++++++                     | 57% ~09m 04s      
   |+++++++++++++++++++++++++++++                     | 58% ~08m 46s      
   |++++++++++++++++++++++++++++++                    | 59% ~08m 25s      
   |++++++++++++++++++++++++++++++                    | 60% ~08m 05s      
   |+++++++++++++++++++++++++++++++                   | 61% ~07m 46s      
   |+++++++++++++++++++++++++++++++                   | 62% ~07m 27s      
   |++++++++++++++++++++++++++++++++                  | 63% ~07m 08s      
   |++++++++++++++++++++++++++++++++                  | 64% ~06m 51s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~06m 33s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~06m 16s      
   |++++++++++++++++++++++++++++++++++                | 67% ~06m 00s      
   |++++++++++++++++++++++++++++++++++               | 68% ~05m 45s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~05m 30s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~05m 15s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~05m 00s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~04m 46s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~04m 32s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~04m 19s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~04m 06s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~03m 53s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~03m 40s      
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~03m 28s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~03m 16s      
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~03m 05s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02m 54s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02m 43s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02m 32s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02m 21s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02m 11s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02m 01s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01m 51s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01m 42s      
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01m 32s      
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01m 23s      
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01m 14s      
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01m 05s      
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~56s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~48s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~40s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 13m 02s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~37m 26s      
   |+                                                 | 2 % ~34m 33s      
   |++                                                | 3 % ~28m 06s      
   |++                                                | 4 % ~25m 01s      
   |+++                                               | 5 % ~20m 24s      
   |+++                                               | 6 % ~17m 47s      
   |++++                                              | 7 % ~15m 12s      
   |++++                                              | 8 % ~13m 13s      
   |+++++                                             | 9 % ~11m 42s      
   |+++++                                             | 10% ~10m 27s      
   |++++++                                            | 11% ~09m 27s      
   |++++++                                            | 12% ~08m 39s      
   |+++++++                                           | 13% ~07m 56s      
   |+++++++                                           | 14% ~07m 19s      
   |++++++++                                          | 15% ~06m 47s      
   |++++++++                                          | 16% ~06m 19s      
   |+++++++++                                         | 17% ~05m 54s      
   |+++++++++                                         | 18% ~05m 45s      
   |++++++++++                                        | 19% ~05m 24s      
   |++++++++++                                        | 20% ~05m 06s      
   |+++++++++++                                       | 21% ~04m 49s      
   |+++++++++++                                       | 22% ~04m 34s      
   |++++++++++++                                      | 23% ~04m 20s      
   |++++++++++++                                      | 24% ~04m 07s      
   |+++++++++++++                                     | 25% ~03m 56s      
   |+++++++++++++                                     | 26% ~03m 45s      
   |++++++++++++++                                    | 27% ~03m 37s      
   |++++++++++++++                                    | 28% ~03m 29s      
   |+++++++++++++++                                   | 29% ~03m 22s      
   |+++++++++++++++                                   | 30% ~03m 14s      
   |++++++++++++++++                                  | 31% ~03m 06s      
   |++++++++++++++++                                  | 32% ~03m 03s      
   |+++++++++++++++++                                 | 33% ~02m 56s      
   |+++++++++++++++++                                | 34% ~02m 48s      
   |++++++++++++++++++                                | 35% ~02m 42s      
   |++++++++++++++++++                                | 36% ~02m 35s      
   |+++++++++++++++++++                               | 37% ~02m 29s      
   |+++++++++++++++++++                               | 38% ~02m 23s      
   |++++++++++++++++++++                              | 39% ~02m 18s      
   |++++++++++++++++++++                              | 40% ~02m 13s      
   |+++++++++++++++++++++                             | 41% ~02m 08s      
   |+++++++++++++++++++++                             | 42% ~02m 03s      
   |++++++++++++++++++++++                            | 43% ~01m 59s      
   |++++++++++++++++++++++                            | 44% ~01m 54s      
   |+++++++++++++++++++++++                           | 45% ~01m 50s      
   |+++++++++++++++++++++++                           | 46% ~01m 46s      
   |++++++++++++++++++++++++                          | 47% ~01m 42s      
   |++++++++++++++++++++++++                          | 48% ~01m 39s      
   |+++++++++++++++++++++++++                         | 49% ~01m 35s      
   |+++++++++++++++++++++++++                         | 50% ~01m 32s      
   |++++++++++++++++++++++++++                        | 51% ~01m 28s      
   |++++++++++++++++++++++++++                        | 52% ~01m 25s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 22s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 19s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 17s      
   |++++++++++++++++++++++++++++                     | 56% ~01m 14s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 11s      
   |+++++++++++++++++++++++++++++                     | 58% ~01m 09s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 06s      
   |++++++++++++++++++++++++++++++                    | 60% ~01m 04s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 02s      
   |+++++++++++++++++++++++++++++++                   | 62% ~59s          
   |++++++++++++++++++++++++++++++++                  | 63% ~57s          
   |++++++++++++++++++++++++++++++++                  | 64% ~55s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~53s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~50s          
   |++++++++++++++++++++++++++++++++++                | 67% ~48s          
   |++++++++++++++++++++++++++++++++++               | 68% ~46s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~45s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~43s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~41s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~39s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~38s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~36s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~34s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~32s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~31s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~29s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~27s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 50s
Aligning dimension 2

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~31m 49s      
   |+                                                 | 2 % ~21m 59s      
   |++                                                | 3 % ~16m 46s      
   |++                                                | 4 % ~14m 46s      
   |+++                                               | 5 % ~12m 05s      
   |+++                                               | 6 % ~10m 25s      
   |++++                                              | 7 % ~09m 22s      
   |++++                                              | 8 % ~08m 14s      
   |+++++                                             | 9 % ~07m 24s      
   |+++++                                             | 10% ~06m 43s      
   |++++++                                            | 11% ~06m 06s      
   |++++++                                            | 12% ~05m 35s      
   |+++++++                                           | 13% ~05m 10s      
   |+++++++                                           | 14% ~04m 47s      
   |++++++++                                          | 15% ~04m 26s      
   |++++++++                                          | 16% ~04m 08s      
   |+++++++++                                         | 17% ~03m 52s      
   |+++++++++                                         | 18% ~03m 38s      
   |++++++++++                                        | 19% ~03m 25s      
   |++++++++++                                        | 20% ~03m 14s      
   |+++++++++++                                       | 21% ~03m 03s      
   |+++++++++++                                       | 22% ~02m 54s      
   |++++++++++++                                      | 23% ~02m 45s      
   |++++++++++++                                      | 24% ~02m 37s      
   |+++++++++++++                                     | 25% ~02m 30s      
   |+++++++++++++                                     | 26% ~02m 24s      
   |++++++++++++++                                    | 27% ~02m 18s      
   |++++++++++++++                                    | 28% ~02m 13s      
   |+++++++++++++++                                   | 29% ~02m 08s      
   |+++++++++++++++                                   | 30% ~02m 03s      
   |++++++++++++++++                                  | 31% ~01m 58s      
   |++++++++++++++++                                  | 32% ~01m 54s      
   |+++++++++++++++++                                 | 33% ~01m 49s      
   |+++++++++++++++++                                | 34% ~01m 46s      
   |++++++++++++++++++                                | 35% ~01m 42s      
   |++++++++++++++++++                                | 36% ~01m 38s      
   |+++++++++++++++++++                               | 37% ~01m 35s      
   |+++++++++++++++++++                               | 38% ~01m 32s      
   |++++++++++++++++++++                              | 39% ~01m 31s      
   |++++++++++++++++++++                              | 40% ~01m 28s      
   |+++++++++++++++++++++                             | 41% ~01m 24s      
   |+++++++++++++++++++++                             | 42% ~01m 21s      
   |++++++++++++++++++++++                            | 43% ~01m 18s      
   |++++++++++++++++++++++                            | 44% ~01m 15s      
   |+++++++++++++++++++++++                           | 45% ~01m 13s      
   |+++++++++++++++++++++++                           | 46% ~01m 10s      
   |++++++++++++++++++++++++                          | 47% ~01m 07s      
   |++++++++++++++++++++++++                          | 48% ~01m 05s      
   |+++++++++++++++++++++++++                         | 49% ~01m 04s      
   |+++++++++++++++++++++++++                         | 50% ~01m 02s      
   |++++++++++++++++++++++++++                        | 51% ~59s          
   |++++++++++++++++++++++++++                        | 52% ~57s          
   |+++++++++++++++++++++++++++                       | 53% ~56s          
   |+++++++++++++++++++++++++++                       | 54% ~54s          
   |++++++++++++++++++++++++++++                      | 55% ~52s          
   |++++++++++++++++++++++++++++                     | 56% ~50s          
   |+++++++++++++++++++++++++++++                     | 57% ~49s          
   |+++++++++++++++++++++++++++++                     | 58% ~47s          
   |++++++++++++++++++++++++++++++                    | 59% ~46s          
   |++++++++++++++++++++++++++++++                    | 60% ~44s          
   |+++++++++++++++++++++++++++++++                   | 61% ~42s          
   |+++++++++++++++++++++++++++++++                   | 62% ~41s          
   |++++++++++++++++++++++++++++++++                  | 63% ~39s          
   |++++++++++++++++++++++++++++++++                  | 64% ~38s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~37s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~35s          
   |++++++++++++++++++++++++++++++++++                | 67% ~34s          
   |++++++++++++++++++++++++++++++++++               | 68% ~33s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~31s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~30s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~29s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~26s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~24s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~23s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~22s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~21s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~20s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 22s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~38m 07s      
   |+                                                 | 2 % ~41m 33s      
   |++                                                | 3 % ~28m 50s      
   |++                                                | 4 % ~23m 28s      
   |+++                                               | 5 % ~18m 48s      
   |+++                                               | 6 % ~15m 48s      
   |++++                                              | 7 % ~13m 50s      
   |++++                                              | 8 % ~12m 03s      
   |+++++                                             | 9 % ~10m 39s      
   |+++++                                             | 10% ~09m 32s      
   |++++++                                            | 11% ~08m 36s      
   |++++++                                            | 12% ~07m 50s      
   |+++++++                                           | 13% ~07m 25s      
   |+++++++                                           | 14% ~06m 50s      
   |++++++++                                          | 15% ~06m 19s      
   |++++++++                                          | 16% ~05m 52s      
   |+++++++++                                         | 17% ~05m 28s      
   |+++++++++                                         | 18% ~05m 07s      
   |++++++++++                                        | 19% ~04m 48s      
   |++++++++++                                        | 20% ~04m 31s      
   |+++++++++++                                       | 21% ~04m 16s      
   |+++++++++++                                       | 22% ~04m 03s      
   |++++++++++++                                      | 23% ~03m 51s      
   |++++++++++++                                      | 24% ~03m 39s      
   |+++++++++++++                                     | 25% ~03m 29s      
   |+++++++++++++                                     | 26% ~03m 19s      
   |++++++++++++++                                    | 27% ~03m 10s      
   |++++++++++++++                                    | 28% ~03m 01s      
   |+++++++++++++++                                   | 29% ~02m 53s      
   |+++++++++++++++                                   | 30% ~02m 46s      
   |++++++++++++++++                                  | 31% ~02m 40s      
   |++++++++++++++++                                  | 32% ~02m 33s      
   |+++++++++++++++++                                 | 33% ~02m 27s      
   |+++++++++++++++++                                | 34% ~02m 21s      
   |++++++++++++++++++                                | 35% ~02m 15s      
   |++++++++++++++++++                                | 36% ~02m 10s      
   |+++++++++++++++++++                               | 37% ~02m 05s      
   |+++++++++++++++++++                               | 38% ~01m 60s      
   |++++++++++++++++++++                              | 39% ~01m 55s      
   |++++++++++++++++++++                              | 40% ~01m 51s      
   |+++++++++++++++++++++                             | 41% ~01m 47s      
   |+++++++++++++++++++++                             | 42% ~01m 43s      
   |++++++++++++++++++++++                            | 43% ~01m 39s      
   |++++++++++++++++++++++                            | 44% ~01m 35s      
   |+++++++++++++++++++++++                           | 45% ~01m 32s      
   |+++++++++++++++++++++++                           | 46% ~01m 29s      
   |++++++++++++++++++++++++                          | 47% ~01m 26s      
   |++++++++++++++++++++++++                          | 48% ~01m 23s      
   |+++++++++++++++++++++++++                         | 49% ~01m 20s      
   |+++++++++++++++++++++++++                         | 50% ~01m 17s      
   |++++++++++++++++++++++++++                        | 51% ~01m 16s      
   |++++++++++++++++++++++++++                        | 52% ~01m 13s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 11s      
   |+++++++++++++++++++++++++++                       | 54% ~01m 08s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 06s      
   |++++++++++++++++++++++++++++                     | 56% ~01m 03s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 01s      
   |+++++++++++++++++++++++++++++                     | 58% ~59s          
   |++++++++++++++++++++++++++++++                    | 59% ~57s          
   |++++++++++++++++++++++++++++++                    | 60% ~54s          
   |+++++++++++++++++++++++++++++++                   | 61% ~52s          
   |+++++++++++++++++++++++++++++++                   | 62% ~51s          
   |++++++++++++++++++++++++++++++++                  | 63% ~49s          
   |++++++++++++++++++++++++++++++++                  | 64% ~47s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~45s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~43s          
   |++++++++++++++++++++++++++++++++++                | 67% ~42s          
   |++++++++++++++++++++++++++++++++++               | 68% ~40s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~38s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~37s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~35s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~33s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~32s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~30s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~29s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~27s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~26s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~25s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~23s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 41s
Aligning dimension 3

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04m 31s      
   |+                                                 | 2 % ~03m 36s      
   |++                                                | 3 % ~03m 03s      
   |++                                                | 4 % ~02m 30s      
   |+++                                               | 5 % ~02m 10s      
   |+++                                               | 6 % ~02m 04s      
   |++++                                              | 7 % ~01m 51s      
   |++++                                              | 8 % ~01m 40s      
   |+++++                                             | 9 % ~01m 31s      
   |+++++                                             | 10% ~01m 24s      
   |++++++                                            | 11% ~01m 18s      
   |++++++                                            | 12% ~01m 13s      
   |+++++++                                           | 13% ~01m 09s      
   |+++++++                                           | 14% ~01m 05s      
   |++++++++                                          | 15% ~01m 01s      
   |++++++++                                          | 16% ~58s          
   |+++++++++                                         | 17% ~56s          
   |+++++++++                                         | 18% ~53s          
   |++++++++++                                        | 19% ~51s          
   |++++++++++                                        | 20% ~49s          
   |+++++++++++                                       | 21% ~48s          
   |+++++++++++                                       | 22% ~47s          
   |++++++++++++                                      | 23% ~46s          
   |++++++++++++                                      | 24% ~45s          
   |+++++++++++++                                     | 25% ~43s          
   |+++++++++++++                                     | 26% ~42s          
   |++++++++++++++                                    | 27% ~41s          
   |++++++++++++++                                    | 28% ~41s          
   |+++++++++++++++                                   | 29% ~41s          
   |+++++++++++++++                                   | 30% ~41s          
   |++++++++++++++++                                  | 31% ~41s          
   |++++++++++++++++                                  | 32% ~41s          
   |+++++++++++++++++                                 | 33% ~40s          
   |+++++++++++++++++                                | 34% ~40s          
   |++++++++++++++++++                                | 35% ~40s          
   |++++++++++++++++++                                | 36% ~40s          
   |+++++++++++++++++++                               | 37% ~43s          
   |+++++++++++++++++++                               | 38% ~42s          
   |++++++++++++++++++++                              | 39% ~40s          
   |++++++++++++++++++++                              | 40% ~39s          
   |+++++++++++++++++++++                             | 41% ~38s          
   |+++++++++++++++++++++                             | 42% ~36s          
   |++++++++++++++++++++++                            | 43% ~35s          
   |++++++++++++++++++++++                            | 44% ~35s          
   |+++++++++++++++++++++++                           | 45% ~34s          
   |+++++++++++++++++++++++                           | 46% ~33s          
   |++++++++++++++++++++++++                          | 47% ~32s          
   |++++++++++++++++++++++++                          | 48% ~32s          
   |+++++++++++++++++++++++++                         | 49% ~31s          
   |+++++++++++++++++++++++++                         | 50% ~30s          
   |++++++++++++++++++++++++++                        | 51% ~29s          
   |++++++++++++++++++++++++++                        | 52% ~28s          
   |+++++++++++++++++++++++++++                       | 53% ~27s          
   |+++++++++++++++++++++++++++                       | 54% ~26s          
   |++++++++++++++++++++++++++++                      | 55% ~25s          
   |++++++++++++++++++++++++++++                     | 56% ~25s          
   |+++++++++++++++++++++++++++++                     | 57% ~24s          
   |+++++++++++++++++++++++++++++                     | 58% ~23s          
   |++++++++++++++++++++++++++++++                    | 59% ~23s          
   |++++++++++++++++++++++++++++++                    | 60% ~22s          
   |+++++++++++++++++++++++++++++++                   | 61% ~21s          
   |+++++++++++++++++++++++++++++++                   | 62% ~20s          
   |++++++++++++++++++++++++++++++++                  | 63% ~20s          
   |++++++++++++++++++++++++++++++++                  | 64% ~19s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~19s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~18s          
   |++++++++++++++++++++++++++++++++++                | 67% ~17s          
   |++++++++++++++++++++++++++++++++++               | 68% ~17s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~16s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~14s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~13s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~12s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~12s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~11s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 54s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~19m 01s      
   |+                                                 | 2 % ~17m 23s      
   |++                                                | 3 % ~13m 07s      
   |++                                                | 4 % ~10m 52s      
   |+++                                               | 5 % ~08m 47s      
   |+++                                               | 6 % ~07m 21s      
   |++++                                              | 7 % ~06m 20s      
   |++++                                              | 8 % ~05m 35s      
   |+++++                                             | 9 % ~04m 58s      
   |+++++                                             | 10% ~04m 29s      
   |++++++                                            | 11% ~04m 18s      
   |++++++                                            | 12% ~03m 56s      
   |+++++++                                           | 13% ~03m 38s      
   |+++++++                                           | 14% ~03m 21s      
   |++++++++                                          | 15% ~03m 06s      
   |++++++++                                          | 16% ~02m 53s      
   |+++++++++                                         | 17% ~02m 42s      
   |+++++++++                                         | 18% ~02m 32s      
   |++++++++++                                        | 19% ~02m 23s      
   |++++++++++                                        | 20% ~02m 14s      
   |+++++++++++                                       | 21% ~02m 08s      
   |+++++++++++                                       | 22% ~02m 03s      
   |++++++++++++                                      | 23% ~01m 58s      
   |++++++++++++                                      | 24% ~01m 53s      
   |+++++++++++++                                     | 25% ~01m 48s      
   |+++++++++++++                                     | 26% ~01m 43s      
   |++++++++++++++                                    | 27% ~01m 39s      
   |++++++++++++++                                    | 28% ~01m 35s      
   |+++++++++++++++                                   | 29% ~01m 31s      
   |+++++++++++++++                                   | 30% ~01m 28s      
   |++++++++++++++++                                  | 31% ~01m 24s      
   |++++++++++++++++                                  | 32% ~01m 21s      
   |+++++++++++++++++                                 | 33% ~01m 19s      
   |+++++++++++++++++                                | 34% ~01m 16s      
   |++++++++++++++++++                                | 35% ~01m 14s      
   |++++++++++++++++++                                | 36% ~01m 12s      
   |+++++++++++++++++++                               | 37% ~01m 10s      
   |+++++++++++++++++++                               | 38% ~01m 07s      
   |++++++++++++++++++++                              | 39% ~01m 05s      
   |++++++++++++++++++++                              | 40% ~01m 03s      
   |+++++++++++++++++++++                             | 41% ~01m 00s      
   |+++++++++++++++++++++                             | 42% ~59s          
   |++++++++++++++++++++++                            | 43% ~57s          
   |++++++++++++++++++++++                            | 44% ~55s          
   |+++++++++++++++++++++++                           | 45% ~53s          
   |+++++++++++++++++++++++                           | 46% ~51s          
   |++++++++++++++++++++++++                          | 47% ~49s          
   |++++++++++++++++++++++++                          | 48% ~50s          
   |+++++++++++++++++++++++++                         | 49% ~48s          
   |+++++++++++++++++++++++++                         | 50% ~46s          
   |++++++++++++++++++++++++++                        | 51% ~45s          
   |++++++++++++++++++++++++++                        | 52% ~43s          
   |+++++++++++++++++++++++++++                       | 53% ~41s          
   |+++++++++++++++++++++++++++                       | 54% ~40s          
   |++++++++++++++++++++++++++++                      | 55% ~39s          
   |++++++++++++++++++++++++++++                     | 56% ~37s          
   |+++++++++++++++++++++++++++++                     | 57% ~36s          
   |+++++++++++++++++++++++++++++                     | 58% ~35s          
   |++++++++++++++++++++++++++++++                    | 59% ~34s          
   |++++++++++++++++++++++++++++++                    | 60% ~32s          
   |+++++++++++++++++++++++++++++++                   | 61% ~31s          
   |+++++++++++++++++++++++++++++++                   | 62% ~30s          
   |++++++++++++++++++++++++++++++++                  | 63% ~29s          
   |++++++++++++++++++++++++++++++++                  | 64% ~28s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~27s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~26s          
   |++++++++++++++++++++++++++++++++++                | 67% ~25s          
   |++++++++++++++++++++++++++++++++++               | 68% ~24s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~23s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~22s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~21s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~20s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~19s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~19s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~18s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~17s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~16s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~16s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~15s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 04s
Aligning dimension 4

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05m 10s      
   |+                                                 | 2 % ~04m 19s      
   |++                                                | 3 % ~03m 12s      
   |++                                                | 4 % ~03m 04s      
   |+++                                               | 5 % ~02m 36s      
   |+++                                               | 6 % ~02m 14s      
   |++++                                              | 7 % ~02m 11s      
   |++++                                              | 8 % ~02m 00s      
   |+++++                                             | 9 % ~01m 50s      
   |+++++                                             | 10% ~01m 45s      
   |++++++                                            | 11% ~01m 40s      
   |++++++                                            | 12% ~01m 35s      
   |+++++++                                           | 13% ~01m 29s      
   |+++++++                                           | 14% ~01m 24s      
   |++++++++                                          | 15% ~01m 19s      
   |++++++++                                          | 16% ~01m 15s      
   |+++++++++                                         | 17% ~01m 12s      
   |+++++++++                                         | 18% ~01m 08s      
   |++++++++++                                        | 19% ~01m 05s      
   |++++++++++                                        | 20% ~01m 02s      
   |+++++++++++                                       | 21% ~60s          
   |+++++++++++                                       | 22% ~58s          
   |++++++++++++                                      | 23% ~56s          
   |++++++++++++                                      | 24% ~54s          
   |+++++++++++++                                     | 25% ~52s          
   |+++++++++++++                                     | 26% ~50s          
   |++++++++++++++                                    | 27% ~49s          
   |++++++++++++++                                    | 28% ~47s          
   |+++++++++++++++                                   | 29% ~46s          
   |+++++++++++++++                                   | 30% ~45s          
   |++++++++++++++++                                  | 31% ~44s          
   |++++++++++++++++                                  | 32% ~43s          
   |+++++++++++++++++                                 | 33% ~42s          
   |+++++++++++++++++                                | 34% ~41s          
   |++++++++++++++++++                                | 35% ~40s          
   |++++++++++++++++++                                | 36% ~39s          
   |+++++++++++++++++++                               | 37% ~38s          
   |+++++++++++++++++++                               | 38% ~38s          
   |++++++++++++++++++++                              | 39% ~39s          
   |++++++++++++++++++++                              | 40% ~42s          
   |+++++++++++++++++++++                             | 41% ~41s          
   |+++++++++++++++++++++                             | 42% ~39s          
   |++++++++++++++++++++++                            | 43% ~38s          
   |++++++++++++++++++++++                            | 44% ~37s          
   |+++++++++++++++++++++++                           | 45% ~36s          
   |+++++++++++++++++++++++                           | 46% ~35s          
   |++++++++++++++++++++++++                          | 47% ~34s          
   |++++++++++++++++++++++++                          | 48% ~34s          
   |+++++++++++++++++++++++++                         | 49% ~34s          
   |+++++++++++++++++++++++++                         | 50% ~33s          
   |++++++++++++++++++++++++++                        | 51% ~32s          
   |++++++++++++++++++++++++++                        | 52% ~31s          
   |+++++++++++++++++++++++++++                       | 53% ~31s          
   |+++++++++++++++++++++++++++                       | 54% ~30s          
   |++++++++++++++++++++++++++++                      | 55% ~30s          
   |++++++++++++++++++++++++++++                     | 56% ~29s          
   |+++++++++++++++++++++++++++++                     | 57% ~28s          
   |+++++++++++++++++++++++++++++                     | 58% ~27s          
   |++++++++++++++++++++++++++++++                    | 59% ~26s          
   |++++++++++++++++++++++++++++++                    | 60% ~25s          
   |+++++++++++++++++++++++++++++++                   | 61% ~25s          
   |+++++++++++++++++++++++++++++++                   | 62% ~24s          
   |++++++++++++++++++++++++++++++++                  | 63% ~23s          
   |++++++++++++++++++++++++++++++++                  | 64% ~22s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~22s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~21s          
   |++++++++++++++++++++++++++++++++++                | 67% ~20s          
   |++++++++++++++++++++++++++++++++++               | 68% ~19s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~19s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~18s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~17s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~16s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~14s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~13s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~13s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 57s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~23m 10s      
   |+                                                 | 2 % ~27m 43s      
   |++                                                | 3 % ~21m 11s      
   |++                                                | 4 % ~17m 09s      
   |+++                                               | 5 % ~14m 00s      
   |+++                                               | 6 % ~11m 53s      
   |++++                                              | 7 % ~10m 26s      
   |++++                                              | 8 % ~09m 05s      
   |+++++                                             | 9 % ~08m 03s      
   |+++++                                             | 10% ~07m 15s      
   |++++++                                            | 11% ~06m 34s      
   |++++++                                            | 12% ~05m 59s      
   |+++++++                                           | 13% ~05m 30s      
   |+++++++                                           | 14% ~05m 21s      
   |++++++++                                          | 15% ~04m 59s      
   |++++++++                                          | 16% ~04m 38s      
   |+++++++++                                         | 17% ~04m 21s      
   |+++++++++                                         | 18% ~04m 04s      
   |++++++++++                                        | 19% ~03m 50s      
   |++++++++++                                        | 20% ~03m 36s      
   |+++++++++++                                       | 21% ~03m 24s      
   |+++++++++++                                       | 22% ~03m 15s      
   |++++++++++++                                      | 23% ~03m 06s      
   |++++++++++++                                      | 24% ~02m 57s      
   |+++++++++++++                                     | 25% ~02m 48s      
   |+++++++++++++                                     | 26% ~02m 40s      
   |++++++++++++++                                    | 27% ~02m 33s      
   |++++++++++++++                                    | 28% ~02m 27s      
   |+++++++++++++++                                   | 29% ~02m 20s      
   |+++++++++++++++                                   | 30% ~02m 15s      
   |++++++++++++++++                                  | 31% ~02m 10s      
   |++++++++++++++++                                  | 32% ~02m 04s      
   |+++++++++++++++++                                 | 33% ~01m 60s      
   |+++++++++++++++++                                | 34% ~01m 55s      
   |++++++++++++++++++                                | 35% ~01m 51s      
   |++++++++++++++++++                                | 36% ~01m 46s      
   |+++++++++++++++++++                               | 37% ~01m 42s      
   |+++++++++++++++++++                               | 38% ~01m 38s      
   |++++++++++++++++++++                              | 39% ~01m 35s      
   |++++++++++++++++++++                              | 40% ~01m 31s      
   |+++++++++++++++++++++                             | 41% ~01m 28s      
   |+++++++++++++++++++++                             | 42% ~01m 25s      
   |++++++++++++++++++++++                            | 43% ~01m 22s      
   |++++++++++++++++++++++                            | 44% ~01m 19s      
   |+++++++++++++++++++++++                           | 45% ~01m 16s      
   |+++++++++++++++++++++++                           | 46% ~01m 13s      
   |++++++++++++++++++++++++                          | 47% ~01m 11s      
   |++++++++++++++++++++++++                          | 48% ~01m 08s      
   |+++++++++++++++++++++++++                         | 49% ~01m 06s      
   |+++++++++++++++++++++++++                         | 50% ~01m 04s      
   |++++++++++++++++++++++++++                        | 51% ~01m 05s      
   |++++++++++++++++++++++++++                        | 52% ~01m 03s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 00s      
   |+++++++++++++++++++++++++++                       | 54% ~58s          
   |++++++++++++++++++++++++++++                      | 55% ~56s          
   |++++++++++++++++++++++++++++                     | 56% ~54s          
   |+++++++++++++++++++++++++++++                     | 57% ~52s          
   |+++++++++++++++++++++++++++++                     | 58% ~50s          
   |++++++++++++++++++++++++++++++                    | 59% ~48s          
   |++++++++++++++++++++++++++++++                    | 60% ~47s          
   |+++++++++++++++++++++++++++++++                   | 61% ~45s          
   |+++++++++++++++++++++++++++++++                   | 62% ~44s          
   |++++++++++++++++++++++++++++++++                  | 63% ~42s          
   |++++++++++++++++++++++++++++++++                  | 64% ~40s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~39s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~38s          
   |++++++++++++++++++++++++++++++++++                | 67% ~36s          
   |++++++++++++++++++++++++++++++++++               | 68% ~35s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~33s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~32s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~31s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~29s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~27s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~25s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~24s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~23s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~22s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~21s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 25s
Aligning dimension 5

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04m 41s      
   |+                                                 | 2 % ~04m 09s      
   |++                                                | 3 % ~06m 53s      
   |++                                                | 4 % ~05m 36s      
   |+++                                               | 5 % ~05m 01s      
   |+++                                               | 6 % ~04m 26s      
   |++++                                              | 7 % ~03m 55s      
   |++++                                              | 8 % ~03m 41s      
   |+++++                                             | 9 % ~03m 20s      
   |+++++                                             | 10% ~03m 02s      
   |++++++                                            | 11% ~02m 54s      
   |++++++                                            | 12% ~02m 44s      
   |+++++++                                           | 13% ~02m 34s      
   |+++++++                                           | 14% ~02m 25s      
   |++++++++                                          | 15% ~02m 17s      
   |++++++++                                          | 16% ~02m 09s      
   |+++++++++                                         | 17% ~02m 02s      
   |+++++++++                                         | 18% ~01m 56s      
   |++++++++++                                        | 19% ~01m 50s      
   |++++++++++                                        | 20% ~01m 45s      
   |+++++++++++                                       | 21% ~01m 40s      
   |+++++++++++                                       | 22% ~01m 35s      
   |++++++++++++                                      | 23% ~01m 31s      
   |++++++++++++                                      | 24% ~01m 27s      
   |+++++++++++++                                     | 25% ~01m 24s      
   |+++++++++++++                                     | 26% ~01m 20s      
   |++++++++++++++                                    | 27% ~01m 18s      
   |++++++++++++++                                    | 28% ~01m 16s      
   |+++++++++++++++                                   | 29% ~01m 13s      
   |+++++++++++++++                                   | 30% ~01m 10s      
   |++++++++++++++++                                  | 31% ~01m 09s      
   |++++++++++++++++                                  | 32% ~01m 07s      
   |+++++++++++++++++                                 | 33% ~01m 05s      
   |+++++++++++++++++                                | 34% ~01m 03s      
   |++++++++++++++++++                                | 35% ~01m 02s      
   |++++++++++++++++++                                | 36% ~01m 00s      
   |+++++++++++++++++++                               | 37% ~59s          
   |+++++++++++++++++++                               | 38% ~57s          
   |++++++++++++++++++++                              | 39% ~55s          
   |++++++++++++++++++++                              | 40% ~01m 11s      
   |+++++++++++++++++++++                             | 41% ~01m 10s      
   |+++++++++++++++++++++                             | 42% ~01m 08s      
   |++++++++++++++++++++++                            | 43% ~01m 06s      
   |++++++++++++++++++++++                            | 44% ~01m 04s      
   |+++++++++++++++++++++++                           | 45% ~01m 03s      
   |+++++++++++++++++++++++                           | 46% ~01m 02s      
   |++++++++++++++++++++++++                          | 47% ~01m 03s      
   |++++++++++++++++++++++++                          | 48% ~01m 01s      
   |+++++++++++++++++++++++++                         | 49% ~59s          
   |+++++++++++++++++++++++++                         | 50% ~57s          
   |++++++++++++++++++++++++++                        | 51% ~56s          
   |++++++++++++++++++++++++++                        | 52% ~54s          
   |+++++++++++++++++++++++++++                       | 53% ~52s          
   |+++++++++++++++++++++++++++                       | 54% ~50s          
   |++++++++++++++++++++++++++++                      | 55% ~48s          
   |++++++++++++++++++++++++++++                     | 56% ~47s          
   |+++++++++++++++++++++++++++++                     | 57% ~45s          
   |+++++++++++++++++++++++++++++                     | 58% ~43s          
   |++++++++++++++++++++++++++++++                    | 59% ~42s          
   |++++++++++++++++++++++++++++++                    | 60% ~40s          
   |+++++++++++++++++++++++++++++++                   | 61% ~39s          
   |+++++++++++++++++++++++++++++++                   | 62% ~38s          
   |++++++++++++++++++++++++++++++++                  | 63% ~36s          
   |++++++++++++++++++++++++++++++++                  | 64% ~35s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~34s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~32s          
   |++++++++++++++++++++++++++++++++++                | 67% ~31s          
   |++++++++++++++++++++++++++++++++++               | 68% ~30s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~29s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~27s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~26s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~25s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~24s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~23s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~22s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~21s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~21s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~20s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~19s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 29s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~14m 39s      
   |+                                                 | 2 % ~14m 00s      
   |++                                                | 3 % ~10m 20s      
   |++                                                | 4 % ~08m 15s      
   |+++                                               | 5 % ~06m 57s      
   |+++                                               | 6 % ~05m 51s      
   |++++                                              | 7 % ~05m 01s      
   |++++                                              | 8 % ~04m 26s      
   |+++++                                             | 9 % ~03m 56s      
   |+++++                                             | 10% ~03m 33s      
   |++++++                                            | 11% ~03m 15s      
   |++++++                                            | 12% ~02m 60s      
   |+++++++                                           | 13% ~02m 46s      
   |+++++++                                           | 14% ~02m 43s      
   |++++++++                                          | 15% ~02m 32s      
   |++++++++                                          | 16% ~02m 22s      
   |+++++++++                                         | 17% ~02m 13s      
   |+++++++++                                         | 18% ~02m 05s      
   |++++++++++                                        | 19% ~01m 58s      
   |++++++++++                                        | 20% ~01m 51s      
   |+++++++++++                                       | 21% ~01m 45s      
   |+++++++++++                                       | 22% ~01m 40s      
   |++++++++++++                                      | 23% ~01m 35s      
   |++++++++++++                                      | 24% ~01m 30s      
   |+++++++++++++                                     | 25% ~01m 27s      
   |+++++++++++++                                     | 26% ~01m 23s      
   |++++++++++++++                                    | 27% ~01m 20s      
   |++++++++++++++                                    | 28% ~01m 16s      
   |+++++++++++++++                                   | 29% ~01m 13s      
   |+++++++++++++++                                   | 30% ~01m 10s      
   |++++++++++++++++                                  | 31% ~01m 08s      
   |++++++++++++++++                                  | 32% ~01m 05s      
   |+++++++++++++++++                                 | 33% ~01m 03s      
   |+++++++++++++++++                                | 34% ~01m 00s      
   |++++++++++++++++++                                | 35% ~58s          
   |++++++++++++++++++                                | 36% ~57s          
   |+++++++++++++++++++                               | 37% ~55s          
   |+++++++++++++++++++                               | 38% ~54s          
   |++++++++++++++++++++                              | 39% ~53s          
   |++++++++++++++++++++                              | 40% ~52s          
   |+++++++++++++++++++++                             | 41% ~52s          
   |+++++++++++++++++++++                             | 42% ~50s          
   |++++++++++++++++++++++                            | 43% ~49s          
   |++++++++++++++++++++++                            | 44% ~47s          
   |+++++++++++++++++++++++                           | 45% ~46s          
   |+++++++++++++++++++++++                           | 46% ~44s          
   |++++++++++++++++++++++++                          | 47% ~43s          
   |++++++++++++++++++++++++                          | 48% ~41s          
   |+++++++++++++++++++++++++                         | 49% ~40s          
   |+++++++++++++++++++++++++                         | 50% ~39s          
   |++++++++++++++++++++++++++                        | 51% ~39s          
   |++++++++++++++++++++++++++                        | 52% ~37s          
   |+++++++++++++++++++++++++++                       | 53% ~36s          
   |+++++++++++++++++++++++++++                       | 54% ~35s          
   |++++++++++++++++++++++++++++                      | 55% ~34s          
   |++++++++++++++++++++++++++++                     | 56% ~32s          
   |+++++++++++++++++++++++++++++                     | 57% ~31s          
   |+++++++++++++++++++++++++++++                     | 58% ~30s          
   |++++++++++++++++++++++++++++++                    | 59% ~29s          
   |++++++++++++++++++++++++++++++                    | 60% ~28s          
   |+++++++++++++++++++++++++++++++                   | 61% ~27s          
   |+++++++++++++++++++++++++++++++                   | 62% ~26s          
   |++++++++++++++++++++++++++++++++                  | 63% ~25s          
   |++++++++++++++++++++++++++++++++                  | 64% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~23s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~23s          
   |++++++++++++++++++++++++++++++++++                | 67% ~22s          
   |++++++++++++++++++++++++++++++++++               | 68% ~21s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~19s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~18s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~18s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~17s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~15s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~14s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~13s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 00s
Aligning dimension 6

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07m 12s      
   |+                                                 | 2 % ~04m 41s      
   |++                                                | 3 % ~03m 45s      
   |++                                                | 4 % ~03m 14s      
   |+++                                               | 5 % ~02m 49s      
   |+++                                               | 6 % ~02m 29s      
   |++++                                              | 7 % ~02m 15s      
   |++++                                              | 8 % ~02m 09s      
   |+++++                                             | 9 % ~01m 57s      
   |+++++                                             | 10% ~01m 48s      
   |++++++                                            | 11% ~01m 40s      
   |++++++                                            | 12% ~01m 33s      
   |+++++++                                           | 13% ~01m 27s      
   |+++++++                                           | 14% ~01m 21s      
   |++++++++                                          | 15% ~01m 17s      
   |++++++++                                          | 16% ~01m 13s      
   |+++++++++                                         | 17% ~01m 09s      
   |+++++++++                                         | 18% ~01m 06s      
   |++++++++++                                        | 19% ~01m 03s      
   |++++++++++                                        | 20% ~01m 00s      
   |+++++++++++                                       | 21% ~58s          
   |+++++++++++                                       | 22% ~55s          
   |++++++++++++                                      | 23% ~53s          
   |++++++++++++                                      | 24% ~51s          
   |+++++++++++++                                     | 25% ~49s          
   |+++++++++++++                                     | 26% ~47s          
   |++++++++++++++                                    | 27% ~46s          
   |++++++++++++++                                    | 28% ~44s          
   |+++++++++++++++                                   | 29% ~43s          
   |+++++++++++++++                                   | 30% ~42s          
   |++++++++++++++++                                  | 31% ~40s          
   |++++++++++++++++                                  | 32% ~40s          
   |+++++++++++++++++                                 | 33% ~39s          
   |+++++++++++++++++                                | 34% ~38s          
   |++++++++++++++++++                                | 35% ~37s          
   |++++++++++++++++++                                | 36% ~36s          
   |+++++++++++++++++++                               | 37% ~38s          
   |+++++++++++++++++++                               | 38% ~36s          
   |++++++++++++++++++++                              | 39% ~35s          
   |++++++++++++++++++++                              | 40% ~34s          
   |+++++++++++++++++++++                             | 41% ~33s          
   |+++++++++++++++++++++                             | 42% ~32s          
   |++++++++++++++++++++++                            | 43% ~31s          
   |++++++++++++++++++++++                            | 44% ~30s          
   |+++++++++++++++++++++++                           | 45% ~29s          
   |+++++++++++++++++++++++                           | 46% ~28s          
   |++++++++++++++++++++++++                          | 47% ~27s          
   |++++++++++++++++++++++++                          | 48% ~27s          
   |+++++++++++++++++++++++++                         | 49% ~26s          
   |+++++++++++++++++++++++++                         | 50% ~25s          
   |++++++++++++++++++++++++++                        | 51% ~24s          
   |++++++++++++++++++++++++++                        | 52% ~24s          
   |+++++++++++++++++++++++++++                       | 53% ~23s          
   |+++++++++++++++++++++++++++                       | 54% ~22s          
   |++++++++++++++++++++++++++++                      | 55% ~22s          
   |++++++++++++++++++++++++++++                     | 56% ~21s          
   |+++++++++++++++++++++++++++++                     | 57% ~20s          
   |+++++++++++++++++++++++++++++                     | 58% ~20s          
   |++++++++++++++++++++++++++++++                    | 59% ~20s          
   |++++++++++++++++++++++++++++++                    | 60% ~19s          
   |+++++++++++++++++++++++++++++++                   | 61% ~19s          
   |+++++++++++++++++++++++++++++++                   | 62% ~18s          
   |++++++++++++++++++++++++++++++++                  | 63% ~18s          
   |++++++++++++++++++++++++++++++++                  | 64% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~17s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~16s          
   |++++++++++++++++++++++++++++++++++                | 67% ~16s          
   |++++++++++++++++++++++++++++++++++               | 68% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~13s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~11s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~10s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~10s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 44s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~15m 27s      
   |+                                                 | 2 % ~14m 28s      
   |++                                                | 3 % ~10m 36s      
   |++                                                | 4 % ~08m 25s      
   |+++                                               | 5 % ~06m 50s      
   |+++                                               | 6 % ~05m 53s      
   |++++                                              | 7 % ~05m 13s      
   |++++                                              | 8 % ~04m 35s      
   |+++++                                             | 9 % ~04m 05s      
   |+++++                                             | 10% ~03m 41s      
   |++++++                                            | 11% ~03m 21s      
   |++++++                                            | 12% ~03m 14s      
   |+++++++                                           | 13% ~02m 58s      
   |+++++++                                           | 14% ~02m 45s      
   |++++++++                                          | 15% ~02m 33s      
   |++++++++                                          | 16% ~02m 23s      
   |+++++++++                                         | 17% ~02m 14s      
   |+++++++++                                         | 18% ~02m 06s      
   |++++++++++                                        | 19% ~01m 58s      
   |++++++++++                                        | 20% ~01m 52s      
   |+++++++++++                                       | 21% ~01m 46s      
   |+++++++++++                                       | 22% ~01m 41s      
   |++++++++++++                                      | 23% ~01m 37s      
   |++++++++++++                                      | 24% ~01m 33s      
   |+++++++++++++                                     | 25% ~01m 28s      
   |+++++++++++++                                     | 26% ~01m 24s      
   |++++++++++++++                                    | 27% ~01m 21s      
   |++++++++++++++                                    | 28% ~01m 18s      
   |+++++++++++++++                                   | 29% ~01m 14s      
   |+++++++++++++++                                   | 30% ~01m 12s      
   |++++++++++++++++                                  | 31% ~01m 09s      
   |++++++++++++++++                                  | 32% ~01m 06s      
   |+++++++++++++++++                                 | 33% ~01m 04s      
   |+++++++++++++++++                                | 34% ~01m 02s      
   |++++++++++++++++++                                | 35% ~01m 00s      
   |++++++++++++++++++                                | 36% ~58s          
   |+++++++++++++++++++                               | 37% ~56s          
   |+++++++++++++++++++                               | 38% ~54s          
   |++++++++++++++++++++                              | 39% ~53s          
   |++++++++++++++++++++                              | 40% ~51s          
   |+++++++++++++++++++++                             | 41% ~49s          
   |+++++++++++++++++++++                             | 42% ~48s          
   |++++++++++++++++++++++                            | 43% ~46s          
   |++++++++++++++++++++++                            | 44% ~45s          
   |+++++++++++++++++++++++                           | 45% ~44s          
   |+++++++++++++++++++++++                           | 46% ~42s          
   |++++++++++++++++++++++++                          | 47% ~41s          
   |++++++++++++++++++++++++                          | 48% ~40s          
   |+++++++++++++++++++++++++                         | 49% ~40s          
   |+++++++++++++++++++++++++                         | 50% ~39s          
   |++++++++++++++++++++++++++                        | 51% ~38s          
   |++++++++++++++++++++++++++                        | 52% ~36s          
   |+++++++++++++++++++++++++++                       | 53% ~35s          
   |+++++++++++++++++++++++++++                       | 54% ~34s          
   |++++++++++++++++++++++++++++                      | 55% ~33s          
   |++++++++++++++++++++++++++++                     | 56% ~31s          
   |+++++++++++++++++++++++++++++                     | 57% ~30s          
   |+++++++++++++++++++++++++++++                     | 58% ~29s          
   |++++++++++++++++++++++++++++++                    | 59% ~28s          
   |++++++++++++++++++++++++++++++                    | 60% ~27s          
   |+++++++++++++++++++++++++++++++                   | 61% ~26s          
   |+++++++++++++++++++++++++++++++                   | 62% ~26s          
   |++++++++++++++++++++++++++++++++                  | 63% ~25s          
   |++++++++++++++++++++++++++++++++                  | 64% ~24s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~23s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~22s          
   |++++++++++++++++++++++++++++++++++                | 67% ~21s          
   |++++++++++++++++++++++++++++++++++               | 68% ~20s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~20s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~19s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~18s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~17s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~17s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~15s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~14s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~13s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 54s
Aligning dimension 7

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05m 07s      
   |+                                                 | 2 % ~03m 38s      
   |++                                                | 3 % ~05m 43s      
   |++                                                | 4 % ~04m 42s      
   |+++                                               | 5 % ~04m 01s      
   |+++                                               | 6 % ~03m 24s      
   |++++                                              | 7 % ~03m 01s      
   |++++                                              | 8 % ~02m 46s      
   |+++++                                             | 9 % ~02m 34s      
   |+++++                                             | 10% ~02m 21s      
   |++++++                                            | 11% ~02m 09s      
   |++++++                                            | 12% ~01m 59s      
   |+++++++                                           | 13% ~01m 51s      
   |+++++++                                           | 14% ~01m 44s      
   |++++++++                                          | 15% ~01m 37s      
   |++++++++                                          | 16% ~01m 32s      
   |+++++++++                                         | 17% ~01m 27s      
   |+++++++++                                         | 18% ~01m 22s      
   |++++++++++                                        | 19% ~01m 18s      
   |++++++++++                                        | 20% ~01m 16s      
   |+++++++++++                                       | 21% ~01m 14s      
   |+++++++++++                                       | 22% ~01m 11s      
   |++++++++++++                                      | 23% ~01m 09s      
   |++++++++++++                                      | 24% ~01m 06s      
   |+++++++++++++                                     | 25% ~01m 03s      
   |+++++++++++++                                     | 26% ~01m 01s      
   |++++++++++++++                                    | 27% ~59s          
   |++++++++++++++                                    | 28% ~57s          
   |+++++++++++++++                                   | 29% ~55s          
   |+++++++++++++++                                   | 30% ~53s          
   |++++++++++++++++                                  | 31% ~51s          
   |++++++++++++++++                                  | 32% ~50s          
   |+++++++++++++++++                                 | 33% ~48s          
   |+++++++++++++++++                                | 34% ~46s          
   |++++++++++++++++++                                | 35% ~45s          
   |++++++++++++++++++                                | 36% ~44s          
   |+++++++++++++++++++                               | 37% ~43s          
   |+++++++++++++++++++                               | 38% ~41s          
   |++++++++++++++++++++                              | 39% ~40s          
   |++++++++++++++++++++                              | 40% ~41s          
   |+++++++++++++++++++++                             | 41% ~40s          
   |+++++++++++++++++++++                             | 42% ~39s          
   |++++++++++++++++++++++                            | 43% ~38s          
   |++++++++++++++++++++++                            | 44% ~36s          
   |+++++++++++++++++++++++                           | 45% ~35s          
   |+++++++++++++++++++++++                           | 46% ~34s          
   |++++++++++++++++++++++++                          | 47% ~33s          
   |++++++++++++++++++++++++                          | 48% ~32s          
   |+++++++++++++++++++++++++                         | 49% ~31s          
   |+++++++++++++++++++++++++                         | 50% ~31s          
   |++++++++++++++++++++++++++                        | 51% ~30s          
   |++++++++++++++++++++++++++                        | 52% ~29s          
   |+++++++++++++++++++++++++++                       | 53% ~29s          
   |+++++++++++++++++++++++++++                       | 54% ~28s          
   |++++++++++++++++++++++++++++                      | 55% ~27s          
   |++++++++++++++++++++++++++++                     | 56% ~26s          
   |+++++++++++++++++++++++++++++                     | 57% ~25s          
   |+++++++++++++++++++++++++++++                     | 58% ~24s          
   |++++++++++++++++++++++++++++++                    | 59% ~24s          
   |++++++++++++++++++++++++++++++                    | 60% ~23s          
   |+++++++++++++++++++++++++++++++                   | 61% ~22s          
   |+++++++++++++++++++++++++++++++                   | 62% ~21s          
   |++++++++++++++++++++++++++++++++                  | 63% ~21s          
   |++++++++++++++++++++++++++++++++                  | 64% ~20s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~19s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~19s          
   |++++++++++++++++++++++++++++++++++                | 67% ~18s          
   |++++++++++++++++++++++++++++++++++               | 68% ~17s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~16s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~16s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~15s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~12s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~12s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~11s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 49s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~09m 32s      
   |+                                                 | 2 % ~05m 46s      
   |++                                                | 3 % ~04m 13s      
   |++                                                | 4 % ~03m 23s      
   |+++                                               | 5 % ~02m 54s      
   |+++                                               | 6 % ~02m 28s      
   |++++                                              | 7 % ~02m 11s      
   |++++                                              | 8 % ~01m 60s      
   |+++++                                             | 9 % ~01m 48s      
   |+++++                                             | 10% ~01m 41s      
   |++++++                                            | 11% ~01m 35s      
   |++++++                                            | 12% ~01m 29s      
   |+++++++                                           | 13% ~01m 23s      
   |+++++++                                           | 14% ~01m 18s      
   |++++++++                                          | 15% ~01m 22s      
   |++++++++                                          | 16% ~01m 17s      
   |+++++++++                                         | 17% ~01m 13s      
   |+++++++++                                         | 18% ~01m 08s      
   |++++++++++                                        | 19% ~01m 05s      
   |++++++++++                                        | 20% ~01m 01s      
   |+++++++++++                                       | 21% ~58s          
   |+++++++++++                                       | 22% ~55s          
   |++++++++++++                                      | 23% ~53s          
   |++++++++++++                                      | 24% ~50s          
   |+++++++++++++                                     | 25% ~50s          
   |+++++++++++++                                     | 26% ~49s          
   |++++++++++++++                                    | 27% ~47s          
   |++++++++++++++                                    | 28% ~46s          
   |+++++++++++++++                                   | 29% ~44s          
   |+++++++++++++++                                   | 30% ~43s          
   |++++++++++++++++                                  | 31% ~43s          
   |++++++++++++++++                                  | 32% ~42s          
   |+++++++++++++++++                                 | 33% ~41s          
   |+++++++++++++++++                                | 34% ~40s          
   |++++++++++++++++++                                | 35% ~39s          
   |++++++++++++++++++                                | 36% ~38s          
   |+++++++++++++++++++                               | 37% ~36s          
   |+++++++++++++++++++                               | 38% ~35s          
   |++++++++++++++++++++                              | 39% ~35s          
   |++++++++++++++++++++                              | 40% ~34s          
   |+++++++++++++++++++++                             | 41% ~34s          
   |+++++++++++++++++++++                             | 42% ~33s          
   |++++++++++++++++++++++                            | 43% ~32s          
   |++++++++++++++++++++++                            | 44% ~31s          
   |+++++++++++++++++++++++                           | 45% ~31s          
   |+++++++++++++++++++++++                           | 46% ~30s          
   |++++++++++++++++++++++++                          | 47% ~29s          
   |++++++++++++++++++++++++                          | 48% ~28s          
   |+++++++++++++++++++++++++                         | 49% ~28s          
   |+++++++++++++++++++++++++                         | 50% ~27s          
   |++++++++++++++++++++++++++                        | 51% ~26s          
   |++++++++++++++++++++++++++                        | 52% ~26s          
   |+++++++++++++++++++++++++++                       | 53% ~27s          
   |+++++++++++++++++++++++++++                       | 54% ~26s          
   |++++++++++++++++++++++++++++                      | 55% ~25s          
   |++++++++++++++++++++++++++++                     | 56% ~24s          
   |+++++++++++++++++++++++++++++                     | 57% ~23s          
   |+++++++++++++++++++++++++++++                     | 58% ~22s          
   |++++++++++++++++++++++++++++++                    | 59% ~22s          
   |++++++++++++++++++++++++++++++                    | 60% ~21s          
   |+++++++++++++++++++++++++++++++                   | 61% ~20s          
   |+++++++++++++++++++++++++++++++                   | 62% ~20s          
   |++++++++++++++++++++++++++++++++                  | 63% ~19s          
   |++++++++++++++++++++++++++++++++                  | 64% ~18s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~18s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~17s          
   |++++++++++++++++++++++++++++++++++                | 67% ~17s          
   |++++++++++++++++++++++++++++++++++               | 68% ~16s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~15s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~15s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~14s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~14s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~13s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~13s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~12s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~12s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~11s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~11s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~10s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 47s
Aligning dimension 8

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~09m 10s      
   |+                                                 | 2 % ~05m 25s      
   |++                                                | 3 % ~03m 51s      
   |++                                                | 4 % ~03m 04s      
   |+++                                               | 5 % ~02m 40s      
   |+++                                               | 6 % ~02m 24s      
   |++++                                              | 7 % ~02m 11s      
   |++++                                              | 8 % ~02m 00s      
   |+++++                                             | 9 % ~01m 54s      
   |+++++                                             | 10% ~01m 45s      
   |++++++                                            | 11% ~01m 37s      
   |++++++                                            | 12% ~01m 31s      
   |+++++++                                           | 13% ~01m 25s      
   |+++++++                                           | 14% ~01m 20s      
   |++++++++                                          | 15% ~01m 15s      
   |++++++++                                          | 16% ~01m 11s      
   |+++++++++                                         | 17% ~01m 08s      
   |+++++++++                                         | 18% ~01m 04s      
   |++++++++++                                        | 19% ~01m 02s      
   |++++++++++                                        | 20% ~60s          
   |+++++++++++                                       | 21% ~59s          
   |+++++++++++                                       | 22% ~59s          
   |++++++++++++                                      | 23% ~58s          
   |++++++++++++                                      | 24% ~57s          
   |+++++++++++++                                     | 25% ~56s          
   |+++++++++++++                                     | 26% ~55s          
   |++++++++++++++                                    | 27% ~54s          
   |++++++++++++++                                    | 28% ~53s          
   |+++++++++++++++                                   | 29% ~51s          
   |+++++++++++++++                                   | 30% ~50s          
   |++++++++++++++++                                  | 31% ~49s          
   |++++++++++++++++                                  | 32% ~48s          
   |+++++++++++++++++                                 | 33% ~48s          
   |+++++++++++++++++                                | 34% ~47s          
   |++++++++++++++++++                                | 35% ~46s          
   |++++++++++++++++++                                | 36% ~45s          
   |+++++++++++++++++++                               | 37% ~46s          
   |+++++++++++++++++++                               | 38% ~45s          
   |++++++++++++++++++++                              | 39% ~43s          
   |++++++++++++++++++++                              | 40% ~42s          
   |+++++++++++++++++++++                             | 41% ~40s          
   |+++++++++++++++++++++                             | 42% ~39s          
   |++++++++++++++++++++++                            | 43% ~38s          
   |++++++++++++++++++++++                            | 44% ~37s          
   |+++++++++++++++++++++++                           | 45% ~36s          
   |+++++++++++++++++++++++                           | 46% ~36s          
   |++++++++++++++++++++++++                          | 47% ~35s          
   |++++++++++++++++++++++++                          | 48% ~34s          
   |+++++++++++++++++++++++++                         | 49% ~33s          
   |+++++++++++++++++++++++++                         | 50% ~32s          
   |++++++++++++++++++++++++++                        | 51% ~32s          
   |++++++++++++++++++++++++++                        | 52% ~31s          
   |+++++++++++++++++++++++++++                       | 53% ~30s          
   |+++++++++++++++++++++++++++                       | 54% ~29s          
   |++++++++++++++++++++++++++++                      | 55% ~29s          
   |++++++++++++++++++++++++++++                     | 56% ~28s          
   |+++++++++++++++++++++++++++++                     | 57% ~27s          
   |+++++++++++++++++++++++++++++                     | 58% ~26s          
   |++++++++++++++++++++++++++++++                    | 59% ~25s          
   |++++++++++++++++++++++++++++++                    | 60% ~25s          
   |+++++++++++++++++++++++++++++++                   | 61% ~24s          
   |+++++++++++++++++++++++++++++++                   | 62% ~23s          
   |++++++++++++++++++++++++++++++++                  | 63% ~22s          
   |++++++++++++++++++++++++++++++++                  | 64% ~21s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~21s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~20s          
   |++++++++++++++++++++++++++++++++++                | 67% ~19s          
   |++++++++++++++++++++++++++++++++++               | 68% ~19s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~18s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~17s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~17s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~16s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~16s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~16s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~15s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~14s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~13s          
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~13s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~12s          
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~05s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 58s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~17m 18s      
   |+                                                 | 2 % ~12m 56s      
   |++                                                | 3 % ~09m 55s      
   |++                                                | 4 % ~07m 60s      

Find clusters using the aligned data

# Run t-SNE
immune.combined <- Seurat::RunTSNE(immune.combined, reduction.use = "cca.aligned", dims.use = 1:20, do.fast = T)
# cluster based on t-SNE space
immune.combined <- FindClusters(immune.combined, reduction.type = "cca.aligned", resolution = 0.6, dims.use = 1:20)
Computing nearest neighbor graph
Computing SNN
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 14028
Number of edges: 811477

Running Louvain algorithm...
Random start: 1
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 2
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 3
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 4
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 5
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 6
Iteration: 1
Modularity: 0.8761
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 7
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 8
Iteration: 1
Modularity: 0.8776
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 9
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 10
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 11
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 12
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 13
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 14
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 15
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 16
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 17
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 18
Iteration: 1
Modularity: 0.8778
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 19
Iteration: 1
Modularity: 0.8764
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 20
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777

Random start: 21
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 22
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 23
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 24
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777

Random start: 25
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 26
Iteration: 1
Modularity: 0.8779
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 27
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 28
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 29
Iteration: 1
Modularity: 0.8776
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 30
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 31
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 32
Iteration: 1
Modularity: 0.8764
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 33
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 34
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 35
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 36
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 37
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 38
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 39
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 40
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 41
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8778
Iteration: 3
Modularity: 0.8778

Random start: 42
Iteration: 1
Modularity: 0.8772
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 43
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 44
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 45
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 46
Iteration: 1
Modularity: 0.8747
Iteration: 2
Modularity: 0.8770
Iteration: 3
Modularity: 0.8770

Random start: 47
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 48
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 49
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 50
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 51
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 52
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 53
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 54
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 55
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 56
Iteration: 1
Modularity: 0.8756
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 57
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 58
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 59
Iteration: 1
Modularity: 0.8765
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 60
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 61
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 62
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 63
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 64
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 65
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 66
Iteration: 1
Modularity: 0.8755
Iteration: 2
Modularity: 0.8778
Iteration: 3
Modularity: 0.8778

Random start: 67
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 68
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 69
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8777
Iteration: 3
Modularity: 0.8777

Random start: 70
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 71
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 72
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 73
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 74
Iteration: 1
Modularity: 0.8760
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 75
Iteration: 1
Modularity: 0.8757
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 76
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 77
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 78
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 79
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 80
Iteration: 1
Modularity: 0.8770
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 81
Iteration: 1
Modularity: 0.8774
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 82
Iteration: 1
Modularity: 0.8763
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 83
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 84
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 85
Iteration: 1
Modularity: 0.8766
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 86
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 87
Iteration: 1
Modularity: 0.8782
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 88
Iteration: 1
Modularity: 0.8769
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 89
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 90
Iteration: 1
Modularity: 0.8775
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 91
Iteration: 1
Modularity: 0.8771
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 92
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 93
Iteration: 1
Modularity: 0.8768
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 94
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 95
Iteration: 1
Modularity: 0.8761
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 96
Iteration: 1
Modularity: 0.8762
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 97
Iteration: 1
Modularity: 0.8759
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 98
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 99
Iteration: 1
Modularity: 0.8773
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Random start: 100
Iteration: 1
Modularity: 0.8767
Iteration: 2
Modularity: 0.8786
Iteration: 3
Modularity: 0.8786

Maximum modularity in 100 random starts: 0.8786
Number of communities: 13
Elapsed time: 65 seconds
# Visualize the dataset alignment and combined clustering results on t-SNE
p1 <- TSNEPlot(immune.combined, do.return = T, pt.size = 0.5, group.by = "stim")
p2 <- TSNEPlot(immune.combined, do.label = T,  do.return = T, pt.size = 0.5)
plot_grid(p1, p2)

Differential gene expression of markers conserved across conditions

# Identify conserved cell type markers 
  # Conserved cell type makres are those that identify a particular cell type in both control       pbmc and stimulated pbmc).  The FindConservedmarkers function uses differential gene             expression analysis to do this.
# As an example, let's look for markers that are conserved between control and stimulated cells    in cluster 7, defined in the "ident.1" argument.
cluster7.markers <- FindConservedMarkers(immune.combined, ident.1 = 7, grouping.var = "stim", print.bar = FALSE)
Testing 7_CTRL vs 0_CTRL, 1_CTRL, 2_CTRL, 3_CTRL, 4_CTRL, 5_CTRL, 6_CTRL, 8_CTRL, 9_CTRL, 10_CTRL, 11_CTRL, 12_CTRL
the condition has length > 1 and only the first element will be usedTesting 7_STIM vs 0_STIM, 1_STIM, 2_STIM, 3_STIM, 4_STIM, 5_STIM, 6_STIM, 8_STIM, 9_STIM, 10_STIM, 11_STIM, 12_STIM
the condition has length > 1 and only the first element will be used
# view the first few markers
cluster7.markers[1:9,]
       CTRL_p_val CTRL_avg_logFC CTRL_pct.1 CTRL_pct.2 CTRL_p_val_adj    STIM_p_val
GNLY            0       4.120640      0.940      0.044              0  0.000000e+00
NKG7            0       3.165247      0.956      0.082              0  0.000000e+00
GZMB            0       2.893528      0.840      0.041              0  0.000000e+00
CLIC3           0       2.392040      0.597      0.023              0  0.000000e+00
FGFBP2          0       2.191768      0.494      0.020              0 3.993554e-169
CTSW            0       2.056329      0.528      0.029              0  0.000000e+00
KLRD1           0       1.874635      0.484      0.019              0  0.000000e+00
PRF1            0       1.843356      0.440      0.015              0  0.000000e+00
KLRC1           0       1.746048      0.362      0.004              0  0.000000e+00
       STIM_avg_logFC STIM_pct.1 STIM_pct.2 STIM_p_val_adj      max_pval minimump_p_val
GNLY         4.054550      0.955      0.058   0.000000e+00  0.000000e+00              0
NKG7         2.880317      0.958      0.079   0.000000e+00  0.000000e+00              0
GZMB         3.105637      0.898      0.058   0.000000e+00  0.000000e+00              0
CLIC3        2.396199      0.602      0.031   0.000000e+00  0.000000e+00              0
FGFBP2       1.493750      0.260      0.015  5.612141e-165 3.993554e-169              0
CTSW         2.139834      0.578      0.035   0.000000e+00  0.000000e+00              0
KLRD1        1.988682      0.560      0.026   0.000000e+00  0.000000e+00              0
PRF1         2.801957      0.850      0.056   0.000000e+00  0.000000e+00              0
KLRC1        1.689936      0.356      0.006   0.000000e+00  0.000000e+00              0
# Confirm that those markers for cluster 7 identified fall into that location on t-SNE.
FeaturePlot(object = immune.combined, features.plot = rownames(cluster7.markers)[1:9], min.cutoff = "q9", cols.use = c("lightgrey", "blue"), pt.size = 0.5)

# Based on those results, what do you think that cell type is cluster 7?
# Explore markers of different immune cell populations to try to identify what cell type each cluster contains.  Select candidates based off of prior knowledge of immune cell markers.
FeaturePlot(object = immune.combined, features.plot = c("CD3D", "SELL", "CREM", "CD8A", "GNLY", "CD79A", "FCGR3A", "CCL2", "PPBP"), min.cutoff = "q9", cols.use = c("lightgrey", "blue"), pt.size = 0.5)

# Now, you can rename your clusters as these cell names.  Trust that they are correct :)
new.ident <- c("CD14 Mono", "CD4 Naive T", "CD4 Memory T", "B", "CD16 Mono", 
    "T activated", "CD8 T", "NK", "DC", "B activated", "Mk", "pDC", "Eryth")
for (i in 0:12) {
    immune.combined <- RenameIdent(object = immune.combined, old.ident.name = i, 
        new.ident.name = new.ident[i + 1])
}
# Run t-SNE to see your new cluster names
TSNEPlot(immune.combined, do.label = T, pt.size = 0.5)

# use SPlitDotPlotGG to plot markers of each cell type (using prior knowledge again).
immune.combined@ident <- factor(immune.combined@ident, levels = (c("pDC", "Eryth", 
    "Mk", "DC", "CD14 Mono", "CD16 Mono", "B activated", "B", "CD8 T", "NK", 
    "T activated", "CD4 Naive T", "CD4 Memory T")))
markers.to.plot <- c("CD3D", "CREM", "HSPH1", "SELL", "GIMAP5", "CACYBP", "GNLY", 
    "NKG7", "CCL5", "CD8A", "MS4A1", "CD79A", "MIR155HG", "NME1", "FCGR3A", 
    "VMO1", "CCL2", "S100A9", "HLA-DQA1", "GPR183", "PPBP", "GNG11", "HBA2", 
    "HBB", "TSPAN13", "IL3RA", "IGJ")
sdp <- SplitDotPlotGG(immune.combined, genes.plot = rev(markers.to.plot), cols.use = c("blue", 
    "red"), x.lab.rot = T, plot.legend = T, dot.scale = 8, do.return = T, grouping.var = "stim")

Differential gene expression of markers that change across conditions (ctrl vs stimulated).

# It's great that we can identify conserved markers across datasets because it allows us to be confident that we have identified subpopulations of cell types that are present in both datasets, ctrl vs stimulated.  However, what is really interesting is what CHANGES when you stimulate the cells.  Let's find out.
# First we need to define some plotting functions to make labeling easier.  Don't worry about trying to understand what each line is doing, it is not interesting.  Just run it!
LabelPoint <- function(plot, genes, exp.mat, adj.x.t = 0, adj.y.t = 0, adj.x.s = 0, 
                       adj.y.s = 0, text.size = 2.5, segment.size = 0.1) {
  for (i in genes) {
    x1 <- exp.mat[i, 1]
    y1 <- exp.mat[i, 2]
    plot <- plot + annotate("text", x = x1 + adj.x.t, y = y1 + adj.y.t, 
                            label = i, size = text.size)
    plot <- plot + annotate("segment", x = x1 + adj.x.s, xend = x1, y = y1 + 
                              adj.y.s, yend = y1, size = segment.size)
  }
  return(plot)
}
LabelUR <- function(plot, genes, exp.mat, adj.u.t = 0.1, adj.r.t = 0.15, adj.u.s = 0.05, 
                    adj.r.s = 0.05, ...) {
  return(LabelPoint(plot, genes, exp.mat, adj.y.t = adj.u.t, adj.x.t = adj.r.t, 
                    adj.y.s = adj.u.s, adj.x.s = adj.r.s, ...))
}
LabelUL <- function(plot, genes, exp.mat, adj.u.t = 0.1, adj.l.t = 0.15, adj.u.s = 0.05, 
                    adj.l.s = 0.05, ...) {
  return(LabelPoint(plot, genes, exp.mat, adj.y.t = adj.u.t, adj.x.t = -adj.l.t, 
                    adj.y.s = adj.u.s, adj.x.s = -adj.l.s, ...))
}
# Now, let's see how naive T cells respond to stimulation with interferon gamma.
t.cells <- SubsetData(immune.combined, ident.use = "CD4 Naive T", subset.raw = T)
t.cells <- SetAllIdent(t.cells, id = "stim")
avg.t.cells <- log1p(AverageExpression(t.cells, show.progress = FALSE))
avg.t.cells$gene <- rownames(avg.t.cells)
p1 <- ggplot(avg.t.cells, aes(CTRL, STIM)) + geom_point() + ggtitle("CD4 Naive T Cells")
plot(p1)

# Let's also see how CD14 monocytes respond to stimulation with interferon gamma.
cd14.mono <- SubsetData(immune.combined, ident.use = "CD14 Mono", subset.raw = T)
cd14.mono <- SetAllIdent(cd14.mono, id = "stim")
avg.cd14.mono <- log1p(AverageExpression(cd14.mono, show.progress = FALSE))
avg.cd14.mono$gene <- rownames(avg.cd14.mono)
p2 <- ggplot(avg.cd14.mono, aes(CTRL, STIM)) + geom_point() + ggtitle("CD14 Monocytes")
plot(p2)

# If you were to go in and find the genes that lie above the linear correlation, you would find these:
genes.to.label1 = c("ISG15", "LY6E", "IFI6", "ISG20", "MX1")
genes.to.label2 = c("IFIT2", "IFIT1")
genes.to.label3 = c("CXCL10", "CCL8")
# Now, plot them on the scatterplots and see where they fall.  These end up being the genes that respond specifically to interferon gamma stimulation, both in naive T cells and CD14 monocytes - an interferon gamma response pathway that many cells have.
p1 <- LabelUR(p1, genes = c(genes.to.label1, genes.to.label2), avg.t.cells, 
    adj.u.t = 0.3, adj.u.s = 0.23)
p1 <- LabelUL(p1, genes = genes.to.label3, avg.t.cells, adj.u.t = 0.5, adj.u.s = 0.4, 
    adj.l.t = 0.25, adj.l.s = 0.25)
p2 <- LabelUR(p2, genes = c(genes.to.label1, genes.to.label3), avg.cd14.mono, 
    adj.u.t = 0.3, adj.u.s = 0.23)
p2 <- LabelUL(p2, genes = genes.to.label2, avg.cd14.mono, adj.u.t = 0.5, adj.u.s = 0.4, 
    adj.l.t = 0.25, adj.l.s = 0.25)
plot_grid(p1,p2)

# CD14 monocytes
CD14mono.interferon.response <- FindMarkers(immune.combined, ident.1 = "CD14 Mono_STIM", ident.2 = "CD14 Mono_CTRL", print.bar = FALSE)
head(CD14mono.interferon.response, 15)
         p_val avg_logFC pct.1 pct.2 p_val_adj
CCL8         0  4.897386 0.913 0.017         0
CXCL10       0  4.786966 0.984 0.038         0
ISG15        0  4.298123 1.000 0.323         0
CXCL11       0  3.519246 0.930 0.013         0
TNFSF10      0  3.438679 0.990 0.048         0
IFIT1        0  3.382982 0.984 0.036         0
RSAD2        0  3.349975 0.990 0.049         0
IFIT3        0  3.342135 0.992 0.063         0
IFIT2        0  3.198709 0.959 0.043         0
ISG20        0  3.171134 1.000 0.231         0
APOBEC3A     0  3.157212 1.000 0.270         0
IDO1         0  3.051465 0.964 0.089         0
IFITM3       0  2.935768 1.000 0.269         0
IL1RN        0  2.820171 0.900 0.042         0
LY6E         0  2.751290 0.998 0.150         0
# CD4 naive T cells
CD4naiveT.interferon.response <- FindMarkers(immune.combined, ident.1 = "CD4 Naive T_STIM", ident.2 = "CD4 Naive T_CTRL", print.bar = FALSE)
head(CD4naiveT.interferon.response, 15)
                p_val avg_logFC pct.1 pct.2     p_val_adj
ISG15    0.000000e+00 3.0651175 0.993 0.174  0.000000e+00
IFIT3    0.000000e+00 2.9217267 0.887 0.007  0.000000e+00
IFI6     0.000000e+00 2.7768472 0.947 0.072  0.000000e+00
IFIT1    0.000000e+00 2.7221775 0.842 0.012  0.000000e+00
ISG20    0.000000e+00 1.8400200 0.978 0.465  0.000000e+00
LY6E    2.400059e-307 2.0797759 0.894 0.152 3.372802e-303
MX1     3.507471e-286 2.3022993 0.813 0.066 4.929049e-282
B2M     5.455557e-241 0.4070204 1.000 1.000 7.666695e-237
IFIT2   3.036719e-209 2.1882740 0.628 0.014 4.267501e-205
OAS1    4.371224e-193 1.9781190 0.604 0.022 6.142881e-189
IFI44L  2.155848e-189 1.8638056 0.611 0.030 3.029613e-185
TNFSF10 1.888087e-177 2.0853079 0.601 0.048 2.653328e-173
MT2A    6.806170e-176 1.8121497 0.625 0.068 9.564711e-172
RSAD2   6.759420e-172 1.9724042 0.540 0.008 9.499013e-168
IRF7    1.801478e-161 1.5769915 0.615 0.080 2.531617e-157
# B cells
b.interferon.response <- FindMarkers(immune.combined, ident.1 = "B_STIM", ident.2 = "B_CTRL", 
    print.bar = FALSE)
head(b.interferon.response, 15)
                p_val avg_logFC pct.1 pct.2     p_val_adj
ISG15   1.582786e-166 3.2354324 0.998 0.234 2.224289e-162
IFIT3   3.229570e-161 3.1188232 0.962 0.051 4.538515e-157
IFI6    8.461593e-158 2.9206823 0.958 0.080 1.189108e-153
ISG20   2.494914e-156 2.0364694 1.000 0.664 3.506103e-152
IFIT1   1.513880e-145 2.8621445 0.903 0.030 2.127456e-141
MX1     1.128702e-131 2.2776610 0.913 0.117 1.586165e-127
LY6E    6.819101e-126 2.1911529 0.893 0.140 9.582882e-122
IFIT2   1.048422e-115 2.5594080 0.790 0.037 1.473348e-111
TNFSF10 5.041031e-114 2.6288385 0.768 0.018 7.084161e-110
B2M     2.054561e-103 0.4355085 1.000 1.000  2.887275e-99
IRF7    2.581241e-101 1.8399930 0.842 0.184  3.627417e-97
PLSCR1   5.085870e-99 1.9410641 0.792 0.120  7.147173e-95
CXCL10   1.165432e-93 3.7508929 0.662 0.007  1.637782e-89
UBE2L6   2.422844e-86 1.4606622 0.854 0.306  3.404823e-82
HERC5    1.193288e-81 1.9377922 0.622 0.023  1.676927e-77
# Now visualize the top 8 fold changes for these 3 groups of cells
# FeatureHeatmap
# CD14 monocytes
FeatureHeatmap(immune.combined, features.plot = rownames(CD14mono.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

# CD4 naive T cells
FeatureHeatmap(immune.combined, features.plot = rownames(CD4naiveT.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

# B cells
FeatureHeatmap(immune.combined, features.plot = rownames(b.interferon.response)[1:8], group.by = "stim", pt.size = 0.25, key.position = "top", max.exp = 3)

Save the objects

# save this work and come back to it later

saveRDS(pbmc, file = paste(directory, "/pbmc_combined.rds", sep = ""))
saveRDS(stim, file = paste(directory, "/stim_combined.rds", sep = ""))
saveRDS(immune.combined, file = paste(directory, "/immune_combined.rds", sep = ""))
LS0tCnRpdGxlOiAiQ1FTIERpc2NvdmVyeSBPcml0ZW50ZWQgRGF0YSBTY2llbmNlIC0gc2NSTkEtc2VxIGRhdGEgYW5hbHlzaXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgSW50cm8KYGBge3J9CiMgQXV0aG9yOiBQYWlnZSAoU3BlbmNlcikgVmVnYSwgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCBLZW4gTGF1IGxhYgojIFRoaXMgdHV0b3JpYWwgd2FzIG1vZGlmaWVkIGZyb20gU2V1cmF0J3MgdHV0b3JpYWxzIGF2YWlsYWJsZSBhdCB0aGUgbGlua3MgYmVsb3c6CiMgaHR0cHM6Ly9zYXRpamFsYWIub3JnL3NldXJhdC9wYm1jM2tfdHV0b3JpYWwuaHRtbAojIGh0dHBzOi8vc2F0aWphbGFiLm9yZy9zZXVyYXQvaW1tdW5lX2FsaWdubWVudC5odG1sCiMgWW91IGNhbiBhbHNvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIFNldXJhdCB0b29sIGJ5IHJlYWRpbmcgdGhlaXIgcGFwZXI6CiMgaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9uYnQuNDA5NgpgYGAKCiMgRGF0YSBpbmZvcm1hdGlvbgpgYGB7cn0KIyBLYW5nIGV0IGFsLiwgMjAxNyAoaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9uYnQuNDA0MikKIyB0byBkb3dubG9hZCBpdCwgZm9sbG93IHRoaXMgbGluazoKIyBodHRwczovL3d3dy5kcm9wYm94LmNvbS9zLzc5cTZkdHRnOHlsMjB6Zy9pbW11bmVfYWxpZ25tZW50X2V4cHJlc3Npb25fbWF0cmljZXMuemlwP2RsPTEKCiMgVGhlIGZpcnN0IGRhdGFzZXQgaXMgMTMsMDE5IFBCTUNzIChwZXJpcGhlcmFsIGJsb29kIG1vbm9udWNsZWFyIGNlbGxzKS4gIFRoZSBzZWNvbmQgaXMgMTIsODc1IHN0aW11bGF0ZWQgUEJNQ3MuCmBgYAoKIyBMZWFybmluZyBnb2FscwpgYGB7cn0KIyBXZSBoYXZlIGEgZmV3IGxlYXJuaW5nIGdvYWxzIGluIHRoaXMgc2VjdGlvbiBvZiB0aGUgYW5hbHlzaXMuICAKIyAgIDEuICBDaGVjayB0aGUgcXVhbGl0eSBvZiB5b3VyIGRhdGEgYW5kIGZpbHRlciBpdC4KIyAgIDIuICBOb3JtYWxpemUsIHNjYWxlLCBhbmQgZmluZCBoaWdobHkgdmFyaWFibGUgZ2VuZXMgKEhWR3MpLgojICAgMy4gIERpbWVuc2lvbiByZWR1Y3Rpb24uCiMgICA0LiAgRGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbi4KYGBgCgoKCgojIENhbGwgb24gdGhlIFNldXJhdCBmdW5jdGlvbgoKYGBge3J9CiMgbG9hZCBpbiB0aGUgU2V1cmF0IHBhY2thZ2UKbGlicmFyeShTZXVyYXQpCgojIHNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5CmRpcmVjdG9yeTwtc2V0d2QoIi9Vc2Vycy9wYWlnZXZlZ2EvRGVza3RvcC9DUVNfMjAxOF9EaXNjb3ZlcnlPcmllbnRlZERhdGFTY2llbmNlIikKCmBgYAoKCiMgTG9hZCBpbiB5b3VyIGRhdGEgYW5kIGNyZWF0ZSBTZXVyYXQgb2JqZWN0CgpgYGB7cn0KIyBsb2FkIGluIHRoZSBkYXRhCiAgIyAzNSw2MzUgcm93cyAoZ2VuZXMpCiAgIyAxMywwMTkgY2VsbHMgKG5hbWVzIGFyZSBiYXJjb2RlcykKCnBibWMuZGF0YSA8LSByZWFkLnRhYmxlKHBhc3RlKGRpcmVjdG9yeSwiL2ltbXVuZV9jb250cm9sX2V4cHJlc3Npb25fbWF0cml4LnR4dC5neiIsIHNlcCA9ICIiKSwgc2VwID0gIlx0IikKCiMgQ3JlYXRlIHRoZSBTZXVyYXQgb2JqZWN0IHdpdGggdGhlIHJhdyAobm9uLW5vcm1hbGl6ZWQgZGF0YSkuICBLZWVwIGFsbCBnZW5lcyBleHByZXNzZWQgaW4gPj0gNSBjZWxscy4gCgpwYm1jIDwtIENyZWF0ZVNldXJhdE9iamVjdChyYXcuZGF0YSA9IHBibWMuZGF0YSwgbWluLmNlbGxzID0gNSwgcHJvamVjdCA9ICJjb250cm9sX1BCTUMiKQoKIyBwYm1jQHJhdy5kYXRhCgpgYGAKCgojIEZpbHRlcmluZwoKYGBge3J9CiMgVGhlIG51bWJlciBvZiBnZW5lcyBhbmQgVU1JcyAobkdlbmUgYW5kIG5VTUkpIGFyZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQKIyBmb3IgZXZlcnkgb2JqZWN0IGJ5IFNldXJhdC4gVXNlIHZpb2xpbiBwbG90cyB0byB2aXN1YWxpemUgbnVtYmVyIGdlbmVzIGFuZCBudW1iZXIgVU1Jcy4Kw7fDtyDiiaUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gYygibkdlbmUiLCAiblVNSSIpLCBuQ29sID0gMiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQoKIyBOb3RlOiBmaW5kaW5nIHRoZSBwZXJjZW50IG1pdG9jaG9uZHJpYWwgZ2VuZXMgZm9yIGEgZGF0YXNldCBpcyBhIGNvbW1vbiBRQyBtZXRyaWMsIGJ1dCwgdGhpcyBkYXRhc2V0IGlzIGFscmVhZHkgcHJlLXByb2Nlc3NlZCB0byByZW1vdmUgY2VsbHMgdGhhdCBoYXZlIG1pdG9jaG9uZHJpYWwgZ2VuZSBleHByZXNzaW9uLgpgYGAKCmBgYHtyfQojIEdlbmVQbG90IGlzIHR5cGljYWxseSB1c2VkIHRvIHZpc3VhbGl6ZSBnZW5lLWdlbmUgcmVsYXRpb25zaGlwcywgYnV0IGNhbiBiZSB1c2VkIHRvIHNlZSBob3cgYW55IHR3byB2YXJpYWJsZXMgY29ycmVsYXRlLiAgV2Ugd2lsbCB1c2UgaXQgdG8gc2VlIGhvdyBudW1iZXIgVU1JcyBjb3JyZWxhdGUgdG8gbnVtYmVyIG9mIGdlbmVzLgoKIyBieSB0aGUgd2F5LCB3aGF0IHdvdWxkIGJlICJiYWQiIGFuZCB3aGF0IHdvdWxkIGJlICJnb29kIj8KCiAgICAgICMgYmFkID0gbG93IG5HZW5lIHdpdGggaGlnaCBuVU1JID0+IG1lYW5zIHRoZXJlIGFyZSBmZXcgdHlwZXMgb2YgZ2VuZXMgd2l0aCBoaWdoIGV4cHJlc3Npb24KICAgICAgIyBnb29kID0gbGluZWFyIGNvcnJlbGF0aW9uIG5HZW5lIHRvIG5VTUksIHdpdGggblVNSSBhYm91dCAzLTVYIGdyZWF0ZXIgdGhhbiBuR2VuZQoKR2VuZVBsb3Qob2JqZWN0ID0gcGJtYywgZ2VuZTEgPSAiblVNSSIsIGdlbmUyID0gIm5HZW5lIikKCiMgTm90ZTogaWYgeW91J3JlIHRyeWluZyB0byByZW1vdmUgY2VsbHMgZXhwcmVzc2luZyBoaWdoICUgbWl0b2Nob25kcmlhbCBnZW5lcywgcGxvdCBuVU1JIHRvICUgbWl0byBhbmQgUUMgZnJvbSB0aGVyZS4KYGBgCgpgYGB7cn0KIyBCYXNlZCBvbiB0aGUgdmlvbGluIHBsb3QsIGZpbHRlciBvdXQgY2VsbHMgYnkgY2hvb3NpbmcgbG93IGFuZCBoaWdoIHRocmVzaG9sZHMuCiAgIyBnZXQgcmlkIG9mIGNlbGxzIHdpdGggdmVyeSBmZXcgbkdlbmVzIG9yIHdheSB0b28gbWFueSBuR2VuZQoKcGJtYyA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBwYm1jLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDIwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKCiMgaWYgeW91IHdlcmUgcmVtb3ZpbmcgY2VsbHMgd2l0aCBoaWdoICUgbWl0byBleHByZXNzaW9uLCByZW1vdmUgdGhlbSBoZXJlIHdpdGggYXBwcm9wcmlhdGUgdGhyZXNob2xkcy4KCiMgcGJtY0ByYXcuZGF0YQpgYGAKCgoKIyBOb3JtYWxpemF0aW9uCgpgYGB7cn0KIyBOb3JtYWxpemUgdGhlIGRhdGEgLSBsb2cgbm9ybWFsaXphdGlvbiBpcyBkZWZhdWx0LgoKcGJtYyA8LSBOb3JtYWxpemVEYXRhKG9iamVjdCA9IHBibWMpCgojIHBibWNAZGF0YQpgYGAKCiMgRmluZCBoaWdobHkgdmFyaWFibGUgZ2VuZXMgKEhWR3MpCgpgYGB7cn0KIyBGaW5kIHRoZSB0b3AgMSwwMDAgbW9zdCB2YXJpYWJsZSBnZW5lcwogICMgaWRlbnRpZmllcyBvdXRsaWVycyBvbiBhICdtZWFuIHZhcmlhYmlsaXR5IHBsb3QnLCB3aXRoIG1lYW4gZXhwcmVzc2lvbiBvbiB0aGUgeC1heGlzIGFuZCAgICAgICAjIGRpc3BlcnNpb24gb24gdGhlIHktYXhpcy4gQ29ycmVjdHMgZm9yIHRoZSBkZXBlbmRlbmNlIG9uIHRoZSBhdmVyYWdlIGV4cHJlc3Npb24gYnkgdXNpbmcKICAjIGJpbm5pbmcuICBTZWUgP0ZpbmRWYXJpYWJsZUdlbmVzIGZvciBkZXRhaWxzLgoKcGJtYyA8LSBGaW5kVmFyaWFibGVHZW5lcyhwYm1jKQoKIyBwYm1jQHZhci5nZW5lcyAjIGNvbnRhaW5zIHZhcmlhYmxlIGdlbmVzCiMgcGJtY0BodmcuaW5mbyAgIyBjb250YWlucyByZXN1bHRzIG9mIEhWRyBhbmFseXNpcwpgYGAKCiMgU2NhbGUgZGF0YQoKYGBge3J9CiMgcmVtb3ZlcyAidW5pbnRlcmVzdGluZyBzb3VyY2VzIG9mIHZhcmlhdGlvbiIsIGxpa2UgdGVjaG5pY2FsIG5vaXNlLCBvciBjZWxsIGN5Y2xlCiMgbGluZWFyIHJlZ3Jlc3Npb24gdG8gcHJlZGljdCBnZW5lIGV4cHJlc3Npb24uIFNlZSA/U2NhbGVEYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKcGJtYyA8LSBTY2FsZURhdGEocGJtYykKCiMgcGJtY0BzY2FsZS5kYXRhCmBgYAoKIyBEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gKFBDQSkKCmBgYHtyfQojIFJ1biBQQ0EgdXNpbmcgdGhlIEhWR3MKCnBibWMgPC0gUnVuUENBKG9iamVjdCA9IHBibWMsIHBjLmdlbmVzID0gcGJtY0B2YXIuZ2VuZXMsIHBjcy5jb21wdXRlID0gMzAsIGRvLnByaW50ID0gRkFMU0UpCgojIHBibWNAZHIkcGNhCgpgYGAKCiMgQ2hvb3NlIFBDcwoKYGBge3J9CiMgUHJpbmNpcGxlIGNvbXBvbmVudHMgKFBDcykgY2FwdHVyZSB0aGUgdmFyaWFiaWxpdHkgaW4geW91ciBkYXRhc2V0LiAgQWx0aG91Z2ggd2Ugc3BlY2lmaWVkIDMwIFBDcywgd2Ugd2FudCB0byB1c2Ugb25seSB0aGUgUENzIHRoYXQgY2FwdHVyZSB2YXJpYWJpbGl0eSBhbmQgZGlzY2FyZCB0aGUgcmVzdCBmb3IgZG93bnN0cmVhbSBhbmFseXNlcy4gIFlvdSBsb29rIGZvciBzYXR1cmF0aW9uIChmbGF0bGluZSkgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcHJpbmNpcGxlIGNvbXBvbmVudHMgYW5kIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB2YXJpYW5jZSBleHBsYWluZWQuCgojIDMgd2F5cyB0byBsb29rIGF0IFBDcy4uLgoKIyAxLiBFbGJvdyBwbG90IG9mIHByaW5jaXBhbCBjb21wb25lbnRzClBDRWxib3dQbG90KG9iamVjdCA9IHBibWMsIG51bS5wYyA9IDMwKQoKIyAyLiBIZWF0bWFwIG9mIGluZGl2aWR1YWwgUENzClBDSGVhdG1hcChvYmplY3QgPSBwYm1jLCBwYy51c2UgPSAxOjE1LCBjZWxscy51c2UgPSA1MDAsIGRvLmJhbGFuY2VkID0gVFJVRSwgbGFiZWwuY29sdW1uID0gRkFMU0UsIHVzZS5mdWxsID0gRkFMU0UpCgpQQ0hlYXRtYXAob2JqZWN0ID0gcGJtYywgcGMudXNlID0gMTY6MzAsIGNlbGxzLnVzZSA9IDUwMCwgZG8uYmFsYW5jZWQgPSBUUlVFLCBsYWJlbC5jb2x1bW4gPSBGQUxTRSwgdXNlLmZ1bGwgPSBGQUxTRSkKCiMgMy4gSmFja3N0cmF3IHBhY2thZ2UgdG8gZGV0ZXJtaW5lIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgcHJpbmNpcGFsIGNvbXBvbmVudHMKcGJtYyA8LSBKYWNrU3RyYXcob2JqZWN0ID0gcGJtYywgbnVtLnBjID0gMzAsIG51bS5yZXBsaWNhdGUgPSAxMDAsIGRpc3BsYXkucHJvZ3Jlc3MgPSBUUlVFKQpKYWNrU3RyYXdQbG90KG9iamVjdCA9IHBibWMsIFBDcyA9IDE6MzApCgpgYGAKCiMgVXNlIFBDcyB0byBjbHVzdGVyIGFuZCB2aXN1YWxpemUgY2x1c3RlcmluZyB3aXRoIHQtU05FCgpgYGB7cn0KIyBDbHVzdGVyaW5nIHVzaW5nIFNldXJhdCdzIG1ldGhvZC4gU2VlIG1vcmUgaW5mbyBpbiA/RmluZENsdXN0ZXJzLgogICMgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIFBDcyB1c2luZyBkaW1zLnVzZQoKcGJtYyA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gcGJtYywgcmVkdWN0aW9uLnR5cGUgPSAicGNhIiwgZGltcy51c2UgPSAxOjIwLCByZXNvbHV0aW9uID0gMC42LAogICAgICAgICAgICAgICAgICAgICBwcmludC5vdXRwdXQgPSAwLCBzYXZlLlNOTiA9IFRSVUUpCiMgcGJtY0BpZGVudAoKIyBSdW4gZGltZW5zaW9uIHJlZHVjdGlvbiAodC1TTkUpIHRvIHZpc3VhbGl6ZSB0aGUgY2x1c3RlcmluZwpwYm1jIDwtIFNldXJhdDo6UnVuVFNORShvYmplY3QgPSBwYm1jLCBkaW1zLnVzZSA9IDE6MjAsIGRvLmZhc3QgPSBUUlVFKQoKVFNORVBsb3Qob2JqZWN0ID0gcGJtYykKCmBgYAoKCiMgRGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbiAtIG9uZSBjbHVzdGVyIGF0IGEgdGltZQoKYGBge3J9CiMgY2x1c3RlciAxIHZzIGFsbCBvdGhlciBjbHVzdGVycyBwb29sZWQgdG9nZXRoZXIKY2x1c3RlcjEubWFya2VycyA8LSBGaW5kTWFya2VycyhvYmplY3QgPSBwYm1jLCBpZGVudC4xID0gMSwgbWluLnBjdCA9IDAuMjUpCnByaW50KHggPSBoZWFkKHggPSBjbHVzdGVyMS5tYXJrZXJzLCBuID01KSkKCiMgY2x1c3RlciAxIHZzIGNsdXN0ZXIgNCBhbmQgNQpjbHVzdGVyMS5tYXJrZXJzLjUgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gcGJtYywgaWRlbnQuMSA9IDEsIGlkZW50LjIgPSA1LCBtaW4ucGN0ID0gMC4yNSkKcHJpbnQoeCA9IGhlYWQoeCA9IGNsdXN0ZXIxLm1hcmtlcnMuNSwgbiA9NSkpCgoKYGBgCgojIERpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24gLSBpdGVyYXRlIHRocm91Z2ggYWxsIGNsdXN0ZXJzCgpgYGB7cn0KIyBGaW5kIG1hcmtlcnMgZm9yIGV2ZXJ5IGNsdXN0ZXIgY29tcGFyZWQgdG8gYWxsIHJlbWFpbmluZyBjZWxscywgcmVwb3J0IG9ubHkgcG9zaXRpdmUgb25lcwpwYm1jLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gcGJtYywgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpCgojIGNhbGwgbGlicmFyeSBkcGx5ciB0byB1c2Ugc29tZSBvZiBpdHMgZnVuY3Rpb25zCmxpYnJhcnkoZHBseXIpCiMgZ3JvdXAgYnkgY2x1c3RlciB1c2luZyBncm91cF9ieSBmdW5jdGlvbiBhbmQgc2hvdyB0b3AgNSByZXN1bHRzIHVzaW5nIHRvcF9uIGZ1bmN0aW9uCnBibWMubWFya2Vycy5ncm91cGVkIDwtIGdyb3VwX2J5KHBibWMubWFya2VycywgY2x1c3RlcikKcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wIDwtIHRvcF9uKHBibWMubWFya2Vycy5ncm91cGVkLCA1LCBhdmdfbG9nRkMpCiMgY29udmVydCBpdCB0byBhIG1hdHJpeCBmb3IgZG93bnN0cmVhbSBhcHBsaWNhdGlvbnMgKHRydXN0IG1lKQpwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3AgPC0gYXMubWF0cml4KHBibWMubWFya2Vycy5ncm91cGVkLnRvcCkKcHJpbnQocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wKQoKIyBXaGF0IGFib3V0IHVzaW5nIGEgZGlmZmVyZW50IHRlc3Q/ICBPbiB5b3VyIG93biB0aW1lLCB0cnlpbmcgYWRkaW5nIHRoZSBhcmd1bWVudCB0ZXN0LnVzZSA9ICJyb2MiIGFuZCBzZWUgaG93IGRpZmZlcmVudCB5b3VyIHJlc3VsdHMgYXJlLiAKYGBgCgoKIyBWaXN1YWxpemUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzCgpgYGB7cn0KIyBUaGUgbGlzdCBvZiBERSBnZW5lcyBpcyBsb25nIGFuZCBpdCB3b3VsZCBiZSB0b28gbXVjaCBpbmZvcm1hdGlvbiB0byB2aXN1YWxpemUgdGhlbSBhbGwuIFNvLCBsZXQncyBwbG90IHRoZSB0b3AgNSBmZWF0dXJlcyAoZ2VuZXMpIGZvciBlYWNoIGNsdXN0ZXIuICBZb3UgY291bGQgZG8gdGhpcyB1c2luZyBhIGZvciBsb29wLCBidXQgbGV0J3Mga2VlcCBpdCBzaW1wbGUuCgojIEZpcnN0LCBpc29sYXRlIHRoZSB0b3AgNSBERSBnZW5lcyBmb3IgZWFjaCBjbHVzdGVyLgpjbHVzdGVyXzAgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDApCmNsdXN0ZXJfMSA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gMSkKY2x1c3Rlcl8yIDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSAyKQpjbHVzdGVyXzMgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDMpCmNsdXN0ZXJfNCA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gNCkKY2x1c3Rlcl81IDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSA1KQpjbHVzdGVyXzYgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDYpCmNsdXN0ZXJfNyA8LSB3aGljaChwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbLCJjbHVzdGVyIl0gPT0gNykKY2x1c3Rlcl84IDwtIHdoaWNoKHBibWMubWFya2Vycy5ncm91cGVkLnRvcFssImNsdXN0ZXIiXSA9PSA4KQpjbHVzdGVyXzkgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDkpCmNsdXN0ZXJfMTAgPC0gd2hpY2gocGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wWywiY2x1c3RlciJdID09IDEwKQoKCiMgMyBvcHRpb25zIGZvciB2aXN1YWxpemF0aW9uLi4uCgojIDEuIFZpb2xpbiBwbG90cwojIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgcG9pbnRzLCBpbnNlcnQgcG9pbnQuc2l6ZS51c2UgPSAwLjEgaW50byB0aGUgYXJndW1lbnQgbGlzdAoKIyAjIHNwZWNpZnkgY2x1c3RlciAwIGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMCwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgMSBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzEsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDIgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8yLCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciAzIGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMywgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgNCBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzQsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDUgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl81LCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciA2IGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfNiwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgNyBoZXJlClZsblBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzcsICJnZW5lIl0sCiAgICAgICAgcG9pbnQuc2l6ZS51c2UgPSAwKQojICMgc3BlY2lmeSBjbHVzdGVyIDggaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl84LCAiZ2VuZSJdLAogICAgICAgIHBvaW50LnNpemUudXNlID0gMCkKIyAjIHNwZWNpZnkgY2x1c3RlciA5IGhlcmUKVmxuUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfOSwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCiMgIyBzcGVjaWZ5IGNsdXN0ZXIgMTAgaGVyZQpWbG5QbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8xMCwgImdlbmUiXSwKICAgICAgICBwb2ludC5zaXplLnVzZSA9IDApCgoKCiMgMi4gRmVhdHVyZSBwbG90CiMgaGVyZSwgdXNlIHQtU05FIGZvciBkaW0gcmVkdWN0aW9uCiMgTm90ZXMgCiMgWW91IGNvdWxkIGNoYW5nZSB0aGUgcmVkdWN0aW9uLnVzZSB0byBkbyBQQ0Egb3IgSUNBIGluc3RlYWQgb2YgdC1TTkUsIGJ1dCBzaW5jZSB3ZSBrbm93IHdoZXJlIG91ciBjbHVzdGVycyB3ZXJlIG1hcHBlZCBpbiB0aGUgY29udGV4dCBvZiB0LVNORSwgdGhpcyBtYWtlcyB0aGUgbW9zdCBzZW5zZSBmb3IgdXMuCgojIENsdXN0ZXIgMApGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMCwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDEKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzEsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciAyCkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8yLCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgMwpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfMywgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDQKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzQsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciA1CkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl81LCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgNgpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfNiwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDcKRmVhdHVyZVBsb3Qob2JqZWN0ID0gcGJtYywgZmVhdHVyZXMucGxvdCA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFtjbHVzdGVyXzcsICJnZW5lIl0sIGNvbHMudXNlID0gYygiZ3JleSIsICJibHVlIiksIHJlZHVjdGlvbi51c2UgPSAidHNuZSIpCiMgQ2x1c3RlciA4CkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl84LCAiZ2VuZSJdLCBjb2xzLnVzZSA9IGMoImdyZXkiLCAiYmx1ZSIpLCByZWR1Y3Rpb24udXNlID0gInRzbmUiKQojIENsdXN0ZXIgOQpGZWF0dXJlUGxvdChvYmplY3QgPSBwYm1jLCBmZWF0dXJlcy5wbG90ID0gcGJtYy5tYXJrZXJzLmdyb3VwZWQudG9wW2NsdXN0ZXJfOSwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKIyBDbHVzdGVyIDEwCkZlYXR1cmVQbG90KG9iamVjdCA9IHBibWMsIGZlYXR1cmVzLnBsb3QgPSBwYm1jLm1hcmtlcnMuZ3JvdXBlZC50b3BbY2x1c3Rlcl8xMCwgImdlbmUiXSwgY29scy51c2UgPSBjKCJncmV5IiwgImJsdWUiKSwgcmVkdWN0aW9uLnVzZSA9ICJ0c25lIikKCgojIDMuIEhlYXRtYXAKIyBIZWF0bWFwcyBoYXZlIGVub3VnaCByb29tIHRvIHNob3cgeW91IHRoZSB0b3AgNSAob3IgbW9yZSEpIGdlbmVzIGZvciBlYWNoIGNsdXN0ZXIuICBMZXQncyBkbyB0aGUgdG9wIDUsIGJ1dCBpZiB5b3UgaGF2ZSB0aW1lLCB0cnkgY2hhbmdpbmcgdGhlIHRvcCBmZWF0dXJlcyB0byAxMCBvciBtb3JlLgoKIyBBbGwgY2x1c3RlcnMKRG9IZWF0bWFwKG9iamVjdCA9IHBibWMsIGdlbmVzLnVzZSA9IHBibWMubWFya2Vycy5ncm91cGVkLnRvcFsgLCAiZ2VuZSJdLCBzbGltLmNvbC5sYWJlbCA9IFRSVUUsIHJlbW92ZS5rZXkgPSBUUlVFKQoKYGBgCgojIFNhdmUgdGhlIG9iamVjdCAKCmBgYHtyfQojIHNhdmUgdGhpcyB3b3JrIGFuZCBjb21lIGJhY2sgdG8gaXQgbGF0ZXIKCnNhdmVSRFMocGJtYywgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9wYm1jX29ubHkucmRzIiwgc2VwID0gIiIpKQpgYGAKCgoKCiMgU1RPUFBJTkcgUE9JTlQgCgoKIyBOb3cgbGV0J3MgYWRkIGluIGEgc2Vjb25kIGRhdGFzZXQsIHdoaWNoIGlzIFBCTUNzIHN0aW11bGF0ZWQgd2l0aCBpbnRlcmZlcm9uIGdhbW1hCgpgYGB7cn0KCnN0aW0uZGF0YSA8LSByZWFkLnRhYmxlKHBhc3RlKGRpcmVjdG9yeSwgIi9pbW11bmVfc3RpbXVsYXRlZF9leHByZXNzaW9uX21hdHJpeC50eHQuZ3oiLCBzZXAgPSAiIiksIHNlcCA9ICJcdCIpCgojIGNyZWF0ZSB0aGUgU2V1cmF0IG9iamVjdCBmb3IgdGhlIHN0aW11bGF0ZWQgUEJNQ3MKc3RpbSA8LSBDcmVhdGVTZXVyYXRPYmplY3QocmF3LmRhdGEgPSBzdGltLmRhdGEsIG1pbi5jZWxscyA9IDUsIHByb2plY3QgPSAic3RpbV9QQk1DIikKCiMgQWxzbyByZS1jcmVhdGUgdGhlIGNvbnRyb2wgUEJNQyBvYmplY3QgYmVjYXVzZSB3ZSB3aWxsIGNoYW5nZSBhIGNvdXBsZSB0aGluZ3MgdGhpcyB0aW1lIGFuZCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHByZXZpb3VzIGluZm8gc3RvcmVkIGluIHRoZSBTZXVyYXQgb2JqZWN0LgpwYm1jIDwtIENyZWF0ZVNldXJhdE9iamVjdChyYXcuZGF0YSA9IHBibWMuZGF0YSwgbWluLmNlbGxzID0gNSwgcHJvamVjdCA9ICJjb250cm9sX1BCTUMiKQoKYGBgCgojIFdlIGhhdmUgYSBmZXcgZ29hbHMgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBhbmFseXNpcy4gIAojICAgMS4gIGlkZW50aWZ5IGNlbGwgdHlwZXMgcHJlc2VudCBpbiBib3RoIHRoZSBjb250cm9sIHBibWMgYW5kIHN0aW11bGF0ZWQgcGJtYyBkYXRhc2V0cwojICAgMi4gIGZpbmQgbWFya2VycyB0aGF0IGlkZW50aWZ5IGNlbGwgdHlwZXMgdGhhdCBhcmUgY29uc2VydmVkIGluIGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQgcGJtY3MKIyAgIDMuICBjb21wYXJlIHRoZSBkYXRhc2V0cyB0byBmaW5kIGNlbGwtdHlwZSBzcGVjaWZpYyByZXNwb25zZXMgdG8gaW50ZXJmZXJvbiBzdGltdWxhdGlvbiAKCiMgUmVhbGx5LCB0aGUgZ29hbCBpcyB0byByZWluZm9yY2UgdGhlIG1ham9yIHN0ZXBzIGluIHNjUk5BLXNlcSBhbmFseXNpcyBieSBnb2luZyBvdmVyIHNvbWUgb2YgdGhlbSBhZ2Fpbi4gIFRoaXMgdGltZSwgd2Ugc2hvdyBob3cgZXZlbiBhIHNpbXBsZSBleHBlcmltZW50YWwgZGVzaWduIChjb250cm9sIHZzIHN0aW11bGF0ZWQpIGNhbiBjb21wbGljYXRlIHRoZSBhbmFseXNpcy4KCgoKIyBGaWx0ZXJpbmcsIG5vcm1hbGl6YXRpb24sIHNjYWxpbmcsIGFuZCBmaW5kIEhWR3MKYGBge3J9CgpWbG5QbG90KG9iamVjdCA9IHN0aW0sIGZlYXR1cmVzLnBsb3QgPSBjKCJuR2VuZSIsICJuVU1JIiksIG5Db2wgPSAyLCBwb2ludC5zaXplLnVzZSA9IDAuMDAxKQoKYGBgYAoKYGBge3J9CkdlbmVQbG90KG9iamVjdCA9IHN0aW0sIGdlbmUxID0gIm5VTUkiLCBnZW5lMiA9ICJuR2VuZSIpCmBgYAoKYGBge3J9CiMgRmlsdGVyIG91dCB0aGUgc3RpbXVsYXRlZCBwYm1jcyB3aXRoIGxvdyB0b3RhbCBnZW5lIGV4cHJlc3Npb24Kc3RpbSA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBzdGltLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDUwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKIyBub3JtYWxpemUKc3RpbSA8LSBOb3JtYWxpemVEYXRhKHN0aW0pCiMgc2NhbGUKc3RpbSA8LSBTY2FsZURhdGEoc3RpbSkKIyBGaW5kIHZhcmlhYmxlIGdlbmVzCnN0aW0gPC1GaW5kVmFyaWFibGVHZW5lcyhzdGltKQojIG1ha2UgbWV0YWRhdGEgaW5kaWNhdGluZyBpdCBpcyBzdGltdWxhdGVkCnN0aW1AbWV0YS5kYXRhJHN0aW0gPC0gIlNUSU0iCgojIHllcywgd2UgYWxyZWFkeSBkaWQgdGhpcyBmb3IgdGhlIGNvbnRyb2wgZGF0YXNldCwgYnV0IHRoZSBkb3duc3RyZWFtIGFuYWx5c2lzIHJlcXVpcmVzIGEgYml0IG1vcmUgc2VsZWN0aXZlIGZpbHRlcmluZyBmb3IgaXQgdG8gcnVuLiAgVGhlIG9ubHkgY2hhbmdlcyB3ZSBhcmUgbWFraW5nIGlzIGNob29zaW5nIGNlbGxzIHdpdGggNTAwLTE4MDAgZ2VuZXMgaW5zdGVhZCBvZiAyMDAtMTgwMCBnZW5lcy4KcGJtYyA8LSBGaWx0ZXJDZWxscyhvYmplY3QgPSBwYm1jLCBzdWJzZXQubmFtZXMgPSAibkdlbmUiLCBsb3cudGhyZXNob2xkcyA9IDUwMCwgaGlnaC50aHJlc2hvbGRzID0gMTgwMCkKIyBub3JtYWxpemUKcGJtYyA8LSBOb3JtYWxpemVEYXRhKHBibWMpCiMgc2NhbGUKcGJtYyA8LSBTY2FsZURhdGEocGJtYykKIyBGaW5kIHZhcmlhYmxlIGdlbmVzCnBibWMgPC1GaW5kVmFyaWFibGVHZW5lcyhwYm1jKQojIG1ha2UgbWV0YWRhdGEgaW5kaWNhdGluZyBpdCBpcyBzdGltdWxhdGVkCnBibWNAbWV0YS5kYXRhJHN0aW0gPC0gIkNUUkwiCgojIENhbGN1bGF0ZXMgYXZlcmFnZSBleHByZXNzaW9uIGFuZCBkaXNwZXJzaW9uLCB1c2luZyB6LXNjb3JlcyB0byBkZXRlcm1pbmUgb3V0bGllcnMsIHdoaWNoIGFjY291bnRzIGZvciB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFiaWxpdHkgYW5kIGF2ZyBleHByZXNzaW9uLgoKYGBgCgpgYGB7cn0KIyBOb3cgZmluZCB0aGUgaGlnaGx5IHZhcmlhYmxlIGdlbmVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gZGF0YXNldHMgKGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQpCgpnLjEgPC0gaGVhZChyb3duYW1lcyhwYm1jQGh2Zy5pbmZvKSwgMTAwMCkKZy4yIDwtIGhlYWQocm93bmFtZXMoc3RpbUBodmcuaW5mbyksIDEwMDApCgojIGtlZXBzIG9ubHkgdW5pcXVlIGdlbmVuYW1lcyAoZ2V0cyByaWQgb2YgZHVwbGljYXRlcykKZ2VuZXMudXNlIDwtIHVuaXF1ZShjKGcuMSwgZy4yKSkKZ2VuZXMudXNlIDwtIGludGVyc2VjdChnZW5lcy51c2UsIHJvd25hbWVzKHBibWNAc2NhbGUuZGF0YSkpCmdlbmVzLnVzZSA8LSBpbnRlcnNlY3QoZ2VuZXMudXNlLCByb3duYW1lcyhzdGltQHNjYWxlLmRhdGEpKQpgYGAKCgojIENhbm9uaWNhbCBDb3JyZWxhdGlvbiBBbmFseXNpcyAoQ0NBKQoKYGBge3J9CiMgUnVuIENDQQogICMgSW5zZXJ0IHNvbWUgaW5mbyB0byBkZXNjcmliZSBDQ0EuCmltbXVuZS5jb21iaW5lZCA8LSBSdW5DQ0EocGJtYywgc3RpbSwgZ2VuZXMudXNlID0gZ2VuZXMudXNlLCBudW0uY2MgPSAzMCkKCiMgVmlzdWFsaXplIENDQSByZXN1bHRzCgogICMgcGxvdCBDQzEgdnMgQ0MyCnAxIDwtIERpbVBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udXNlID0gImNjYSIsIGdyb3VwLmJ5ID0gInN0aW0iLCBwdC5zaXplID0gMC41LCBkby5yZXR1cm4gPSBUUlVFKQogICMgdmlvbGluIHBsb3QgdG8gdmlzdWFsaXplIENDMSBhbmQgQ0MyCnAyIDwtIFZsblBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCBmZWF0dXJlcy5wbG90ID0gIkNDMSIsIGdyb3VwLmJ5ID0gInN0aW0iLCBkby5yZXR1cm4gPSBUUlVFLCBwb2ludC5zaXplLnVzZSA9IDAuMDAxKQpwMyA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJDQzIiLCBncm91cC5ieSA9ICJzdGltIiwgZG8ucmV0dXJuID0gVFJVRSwgcG9pbnQuc2l6ZS51c2UgPSAwLjAwMSkKcGxvdChwMSkKcGxvdF9ncmlkKHAyLCBwMykKCmBgYAoKIyBDaG9vc2UgQ0NzCgpgYGB7cn0KCiMgTXVjaCBsaWtlIHNlbGVjdGluZyB0aGUgbnVtYmVyIG9mIFBDcyB0byB1c2UgaW4gdGhlIGZpcnN0IGFuYWx5c2lzLCB3ZSBtdXN0IHNlbGVjdCB0aGUgbnVtYmVyIG9mIENDcyB0byB1c2UgaGVyZS4gIFRoZSBNZXRhZ2VuQmljb3JQbG90IGZ1bmN0aW9uIGJlbG93IGlzIGFuYWxvZ291cyB0byB0aGUgZWxib3cgcGxvdCBtZXRob2QgdXNlZCBpbiB0aGUgZmlyc3QgYW5hbHlzaXMgb2YgMSBkYXRhc2V0LiAgWW91IGxvb2sgZm9yIHNhdHVyYXRpb24gKGZsYXRsaW5lKS4KCiMgMiB3YXlzIHRvIHBpY2sgQ0NzLCBidXQgd2Ugd29uJ3QgcnVuIHRoZSBmaXJzdCBiZWNhdXNlIGl0IHRha2VzIHRvbyBsb25nIHRvIGNvbXB1dGUgZm9yIHRoZSB0aW1lIHdlIGhhdmUgaW4gY2xhc3MuICBGZWVsIGZyZWUgdG8gdHJ5IGl0IG9uIHlvdXIgb3duIQoKIyAjIDEuICBNZXRhZ2VuZUJpY29yUGxvdAojIHA0IDwtIE1ldGFnZW5lQmljb3JQbG90KGltbXVuZS5jb21iaW5lZCwgZ3JvdXBpbmcudmFyID0gInN0aW0iLCBkaW1zLmV2YWwgPSAxOjMwLCBkaXNwbGF5LnByb2dyZXNzID0gVFJVRSkKcDQKCiMgMi4gSGVhdG1hcCAtIHVzZSB0aGUgdG9wIDUwMCBjZWxscwogICMgeW91IG5lZWQgdGhyZWUgcGFnZXMgdG8gc2VlIGFsbCB0aGUgQ0NzCiAgIyBwdXJwbGUgPSBsb3cgZXhwcmVzc2lvbgogICMgeWVsbG93ID0gaGlnaApEaW1IZWF0bWFwKG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhIiwgY2VsbHMudXNlID0gNTAwLCBkaW0udXNlID0gMTo5LAogICAgICAgICAgIGRvLmJhbGFuY2VkID0gVFJVRSkKCkRpbUhlYXRtYXAob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udHlwZSA9ICJjY2EiLCBjZWxscy51c2UgPSA1MDAsIGRpbS51c2UgPSAxMDoxOCwKICAgICAgICAgICBkby5iYWxhbmNlZCA9IFRSVUUpCgpEaW1IZWF0bWFwKG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhIiwgY2VsbHMudXNlID0gNTAwLCBkaW0udXNlID0gMTk6MzAsCiAgICAgICAgICAgZG8uYmFsYW5jZWQgPSBUUlVFKQoKIyBIb3cgbWFueSBDQ3MgZG8geW91IHRoaW5rIHdlIHNob3VsZCBwaWNrPwoKYGBgCgojIEFsaWduIHRoZSBDQ0Egc3Vic3BhY2VzIGFuZCB2aXN1YWxpemUKCmBgYHtyfQojIHVzZSB0aGUgZmlyc3QgMjAgQ0NzIHRvIGdldCBhIG5ldyBkaW1lbnNpb24gcmVkdWN0aW9uIHRoYXQgeW91IGNhbiB2aXN1YWxpemUgYW5kIHVzZSBmb3IgY2x1c3RlcmluZwoKaW1tdW5lLmNvbWJpbmVkIDwtIEFsaWduU3Vic3BhY2UoaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udHlwZSA9ICJjY2EiLCBncm91cGluZy52YXIgPSAic3RpbSIsIAogICAgICAgICAgICAgICAgICAgIGRpbXMuYWxpZ24gPSAxOjIwKQoKIyB2aXN1YWxpemUgdGhlIGFsaWduZWQgQ0NBIC0gaG93IGRvZXMgdGhpcyBjb21wYXJlIHRvIGJlZm9yZSBhbGlnbm1lbnQ/CgpwMSA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJBQ0MxIiwgZ3JvdXAuYnkgPSAic3RpbSIsIGRvLnJldHVybiA9ICJUUlVFIiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQpwMiA8LSBWbG5QbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9ICJBQ0MyIiwgZ3JvdXAuYnkgPSAic3RpbSIsIGRvLnJldHVybiA9ICJUUlVFIiwgcG9pbnQuc2l6ZS51c2UgPSAwLjAxKQpwbG90X2dyaWQocDEsIHAyKQoKIyBvYmplY3RAZHIkcmVkdWN0aW9uLnR5cGUuYWxpZ25lZAoKYGBgCgojIEZpbmQgY2x1c3RlcnMgdXNpbmcgdGhlIGFsaWduZWQgZGF0YQoKYGBge3J9CiMgUnVuIHQtU05FCmltbXVuZS5jb21iaW5lZCA8LSBTZXVyYXQ6OlJ1blRTTkUoaW1tdW5lLmNvbWJpbmVkLCByZWR1Y3Rpb24udXNlID0gImNjYS5hbGlnbmVkIiwgZGltcy51c2UgPSAxOjIwLCBkby5mYXN0ID0gVCkKCiMgY2x1c3RlciBiYXNlZCBvbiB0LVNORSBzcGFjZQppbW11bmUuY29tYmluZWQgPC0gRmluZENsdXN0ZXJzKGltbXVuZS5jb21iaW5lZCwgcmVkdWN0aW9uLnR5cGUgPSAiY2NhLmFsaWduZWQiLCByZXNvbHV0aW9uID0gMC42LCBkaW1zLnVzZSA9IDE6MjApCgojIFZpc3VhbGl6ZSB0aGUgZGF0YXNldCBhbGlnbm1lbnQgYW5kIGNvbWJpbmVkIGNsdXN0ZXJpbmcgcmVzdWx0cyBvbiB0LVNORQpwMSA8LSBUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLnJldHVybiA9IFQsIHB0LnNpemUgPSAwLjUsIGdyb3VwLmJ5ID0gInN0aW0iKQpwMiA8LSBUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLmxhYmVsID0gVCwgIGRvLnJldHVybiA9IFQsIHB0LnNpemUgPSAwLjUpCnBsb3RfZ3JpZChwMSwgcDIpCgpgYGAKCgojIERpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24gb2YgbWFya2VycyBjb25zZXJ2ZWQgYWNyb3NzIGNvbmRpdGlvbnMKCmBgYHtyfQoKIyBJZGVudGlmeSBjb25zZXJ2ZWQgY2VsbCB0eXBlIG1hcmtlcnMgCiAgIyBDb25zZXJ2ZWQgY2VsbCB0eXBlIG1ha3JlcyBhcmUgdGhvc2UgdGhhdCBpZGVudGlmeSBhIHBhcnRpY3VsYXIgY2VsbCB0eXBlIGluIGJvdGggY29udHJvbCAgICAgICBwYm1jIGFuZCBzdGltdWxhdGVkIHBibWMpLiAgVGhlIEZpbmRDb25zZXJ2ZWRtYXJrZXJzIGZ1bmN0aW9uIHVzZXMgZGlmZmVyZW50aWFsIGdlbmUgICAgICAgICAgICAgZXhwcmVzc2lvbiBhbmFseXNpcyB0byBkbyB0aGlzLgoKIyBBcyBhbiBleGFtcGxlLCBsZXQncyBsb29rIGZvciBtYXJrZXJzIHRoYXQgYXJlIGNvbnNlcnZlZCBiZXR3ZWVuIGNvbnRyb2wgYW5kIHN0aW11bGF0ZWQgY2VsbHMgICAgaW4gY2x1c3RlciA3LCBkZWZpbmVkIGluIHRoZSAiaWRlbnQuMSIgYXJndW1lbnQuCmNsdXN0ZXI3Lm1hcmtlcnMgPC0gRmluZENvbnNlcnZlZE1hcmtlcnMoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC4xID0gNywgZ3JvdXBpbmcudmFyID0gInN0aW0iLCBwcmludC5iYXIgPSBGQUxTRSkKIyB2aWV3IHRoZSBmaXJzdCBmZXcgbWFya2VycwpjbHVzdGVyNy5tYXJrZXJzWzE6OSxdCgojIENvbmZpcm0gdGhhdCB0aG9zZSBtYXJrZXJzIGZvciBjbHVzdGVyIDcgaWRlbnRpZmllZCBmYWxsIGludG8gdGhhdCBsb2NhdGlvbiBvbiB0LVNORS4KRmVhdHVyZVBsb3Qob2JqZWN0ID0gaW1tdW5lLmNvbWJpbmVkLCBmZWF0dXJlcy5wbG90ID0gcm93bmFtZXMoY2x1c3RlcjcubWFya2VycylbMTo5XSwgbWluLmN1dG9mZiA9ICJxOSIsIGNvbHMudXNlID0gYygibGlnaHRncmV5IiwgImJsdWUiKSwgcHQuc2l6ZSA9IDAuNSkKCiMgQmFzZWQgb24gdGhvc2UgcmVzdWx0cywgd2hhdCBjZWxsIHR5cGUgaXMgY2x1c3RlciA3PwoKYGBgCgpgYGB7cn0KIyBFeHBsb3JlIG1hcmtlcnMgb2YgZGlmZmVyZW50IGltbXVuZSBjZWxsIHBvcHVsYXRpb25zIHRvIHRyeSB0byBpZGVudGlmeSB3aGF0IGNlbGwgdHlwZSBlYWNoIGNsdXN0ZXIgY29udGFpbnMuICBTZWxlY3QgY2FuZGlkYXRlcyBiYXNlZCBvZmYgb2YgcHJpb3Iga25vd2xlZGdlIG9mIGltbXVuZSBjZWxsIG1hcmtlcnMuCkZlYXR1cmVQbG90KG9iamVjdCA9IGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9IGMoIkNEM0QiLCAiU0VMTCIsICJDUkVNIiwgIkNEOEEiLCAiR05MWSIsICJDRDc5QSIsICJGQ0dSM0EiLCAiQ0NMMiIsICJQUEJQIiksIG1pbi5jdXRvZmYgPSAicTkiLCBjb2xzLnVzZSA9IGMoImxpZ2h0Z3JleSIsICJibHVlIiksIHB0LnNpemUgPSAwLjUpCgojIE5vdywgeW91IGNhbiByZW5hbWUgeW91ciBjbHVzdGVycyBhcyB0aGVzZSBjZWxsIG5hbWVzLiAgVHJ1c3QgdGhhdCB0aGV5IGFyZSBjb3JyZWN0IDopCm5ldy5pZGVudCA8LSBjKCJDRDE0IE1vbm8iLCAiQ0Q0IE5haXZlIFQiLCAiQ0Q0IE1lbW9yeSBUIiwgIkIiLCAiQ0QxNiBNb25vIiwgCiAgICAiVCBhY3RpdmF0ZWQiLCAiQ0Q4IFQiLCAiTksiLCAiREMiLCAiQiBhY3RpdmF0ZWQiLCAiTWsiLCAicERDIiwgIkVyeXRoIikKZm9yIChpIGluIDA6MTIpIHsKICAgIGltbXVuZS5jb21iaW5lZCA8LSBSZW5hbWVJZGVudChvYmplY3QgPSBpbW11bmUuY29tYmluZWQsIG9sZC5pZGVudC5uYW1lID0gaSwgCiAgICAgICAgbmV3LmlkZW50Lm5hbWUgPSBuZXcuaWRlbnRbaSArIDFdKQp9CgojIFJ1biB0LVNORSB0byBzZWUgeW91ciBuZXcgY2x1c3RlciBuYW1lcwpUU05FUGxvdChpbW11bmUuY29tYmluZWQsIGRvLmxhYmVsID0gVCwgcHQuc2l6ZSA9IDAuNSkKCiMgdXNlIFNQbGl0RG90UGxvdEdHIHRvIHBsb3QgbWFya2VycyBvZiBlYWNoIGNlbGwgdHlwZSAodXNpbmcgcHJpb3Iga25vd2xlZGdlIGFnYWluKS4KaW1tdW5lLmNvbWJpbmVkQGlkZW50IDwtIGZhY3RvcihpbW11bmUuY29tYmluZWRAaWRlbnQsIGxldmVscyA9IChjKCJwREMiLCAiRXJ5dGgiLCAKICAgICJNayIsICJEQyIsICJDRDE0IE1vbm8iLCAiQ0QxNiBNb25vIiwgIkIgYWN0aXZhdGVkIiwgIkIiLCAiQ0Q4IFQiLCAiTksiLCAKICAgICJUIGFjdGl2YXRlZCIsICJDRDQgTmFpdmUgVCIsICJDRDQgTWVtb3J5IFQiKSkpCm1hcmtlcnMudG8ucGxvdCA8LSBjKCJDRDNEIiwgIkNSRU0iLCAiSFNQSDEiLCAiU0VMTCIsICJHSU1BUDUiLCAiQ0FDWUJQIiwgIkdOTFkiLCAKICAgICJOS0c3IiwgIkNDTDUiLCAiQ0Q4QSIsICJNUzRBMSIsICJDRDc5QSIsICJNSVIxNTVIRyIsICJOTUUxIiwgIkZDR1IzQSIsIAogICAgIlZNTzEiLCAiQ0NMMiIsICJTMTAwQTkiLCAiSExBLURRQTEiLCAiR1BSMTgzIiwgIlBQQlAiLCAiR05HMTEiLCAiSEJBMiIsIAogICAgIkhCQiIsICJUU1BBTjEzIiwgIklMM1JBIiwgIklHSiIpCnNkcCA8LSBTcGxpdERvdFBsb3RHRyhpbW11bmUuY29tYmluZWQsIGdlbmVzLnBsb3QgPSByZXYobWFya2Vycy50by5wbG90KSwgY29scy51c2UgPSBjKCJibHVlIiwgCiAgICAicmVkIiksIHgubGFiLnJvdCA9IFQsIHBsb3QubGVnZW5kID0gVCwgZG90LnNjYWxlID0gOCwgZG8ucmV0dXJuID0gVCwgZ3JvdXBpbmcudmFyID0gInN0aW0iKQpgYGBgCgoKIyBEaWZmZXJlbnRpYWwgZ2VuZSBleHByZXNzaW9uIG9mIG1hcmtlcnMgdGhhdCBjaGFuZ2UgYWNyb3NzIGNvbmRpdGlvbnMgKGN0cmwgdnMgc3RpbXVsYXRlZCkuCgpgYGB7cn0KIyBJdCdzIGdyZWF0IHRoYXQgd2UgY2FuIGlkZW50aWZ5IGNvbnNlcnZlZCBtYXJrZXJzIGFjcm9zcyBkYXRhc2V0cyBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBiZSBjb25maWRlbnQgdGhhdCB3ZSBoYXZlIGlkZW50aWZpZWQgc3VicG9wdWxhdGlvbnMgb2YgY2VsbCB0eXBlcyB0aGF0IGFyZSBwcmVzZW50IGluIGJvdGggZGF0YXNldHMsIGN0cmwgdnMgc3RpbXVsYXRlZC4gIEhvd2V2ZXIsIHdoYXQgaXMgcmVhbGx5IGludGVyZXN0aW5nIGlzIHdoYXQgQ0hBTkdFUyB3aGVuIHlvdSBzdGltdWxhdGUgdGhlIGNlbGxzLiAgTGV0J3MgZmluZCBvdXQuCgojIEZpcnN0IHdlIG5lZWQgdG8gZGVmaW5lIHNvbWUgcGxvdHRpbmcgZnVuY3Rpb25zIHRvIG1ha2UgbGFiZWxpbmcgZWFzaWVyLiAgRG9uJ3Qgd29ycnkgYWJvdXQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIGxpbmUgaXMgZG9pbmcsIGl0IGlzIG5vdCBpbnRlcmVzdGluZy4gIEp1c3QgcnVuIGl0IQoKTGFiZWxQb2ludCA8LSBmdW5jdGlvbihwbG90LCBnZW5lcywgZXhwLm1hdCwgYWRqLngudCA9IDAsIGFkai55LnQgPSAwLCBhZGoueC5zID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICAgYWRqLnkucyA9IDAsIHRleHQuc2l6ZSA9IDIuNSwgc2VnbWVudC5zaXplID0gMC4xKSB7CiAgZm9yIChpIGluIGdlbmVzKSB7CiAgICB4MSA8LSBleHAubWF0W2ksIDFdCiAgICB5MSA8LSBleHAubWF0W2ksIDJdCiAgICBwbG90IDwtIHBsb3QgKyBhbm5vdGF0ZSgidGV4dCIsIHggPSB4MSArIGFkai54LnQsIHkgPSB5MSArIGFkai55LnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBpLCBzaXplID0gdGV4dC5zaXplKQogICAgcGxvdCA8LSBwbG90ICsgYW5ub3RhdGUoInNlZ21lbnQiLCB4ID0geDEgKyBhZGoueC5zLCB4ZW5kID0geDEsIHkgPSB5MSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGoueS5zLCB5ZW5kID0geTEsIHNpemUgPSBzZWdtZW50LnNpemUpCiAgfQogIHJldHVybihwbG90KQp9CgpMYWJlbFVSIDwtIGZ1bmN0aW9uKHBsb3QsIGdlbmVzLCBleHAubWF0LCBhZGoudS50ID0gMC4xLCBhZGouci50ID0gMC4xNSwgYWRqLnUucyA9IDAuMDUsIAogICAgICAgICAgICAgICAgICAgIGFkai5yLnMgPSAwLjA1LCAuLi4pIHsKICByZXR1cm4oTGFiZWxQb2ludChwbG90LCBnZW5lcywgZXhwLm1hdCwgYWRqLnkudCA9IGFkai51LnQsIGFkai54LnQgPSBhZGouci50LCAKICAgICAgICAgICAgICAgICAgICBhZGoueS5zID0gYWRqLnUucywgYWRqLngucyA9IGFkai5yLnMsIC4uLikpCn0KCkxhYmVsVUwgPC0gZnVuY3Rpb24ocGxvdCwgZ2VuZXMsIGV4cC5tYXQsIGFkai51LnQgPSAwLjEsIGFkai5sLnQgPSAwLjE1LCBhZGoudS5zID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgICAgYWRqLmwucyA9IDAuMDUsIC4uLikgewogIHJldHVybihMYWJlbFBvaW50KHBsb3QsIGdlbmVzLCBleHAubWF0LCBhZGoueS50ID0gYWRqLnUudCwgYWRqLngudCA9IC1hZGoubC50LCAKICAgICAgICAgICAgICAgICAgICBhZGoueS5zID0gYWRqLnUucywgYWRqLngucyA9IC1hZGoubC5zLCAuLi4pKQp9CgpgYGAKCmBgYHtyfQojIE5vdywgbGV0J3Mgc2VlIGhvdyBuYWl2ZSBUIGNlbGxzIHJlc3BvbmQgdG8gc3RpbXVsYXRpb24gd2l0aCBpbnRlcmZlcm9uIGdhbW1hLgoKdC5jZWxscyA8LSBTdWJzZXREYXRhKGltbXVuZS5jb21iaW5lZCwgaWRlbnQudXNlID0gIkNENCBOYWl2ZSBUIiwgc3Vic2V0LnJhdyA9IFQpCnQuY2VsbHMgPC0gU2V0QWxsSWRlbnQodC5jZWxscywgaWQgPSAic3RpbSIpCmF2Zy50LmNlbGxzIDwtIGxvZzFwKEF2ZXJhZ2VFeHByZXNzaW9uKHQuY2VsbHMsIHNob3cucHJvZ3Jlc3MgPSBGQUxTRSkpCmF2Zy50LmNlbGxzJGdlbmUgPC0gcm93bmFtZXMoYXZnLnQuY2VsbHMpCgpwMSA8LSBnZ3Bsb3QoYXZnLnQuY2VsbHMsIGFlcyhDVFJMLCBTVElNKSkgKyBnZW9tX3BvaW50KCkgKyBnZ3RpdGxlKCJDRDQgTmFpdmUgVCBDZWxscyIpCnBsb3QocDEpCmBgYAoKYGBge3J9CiMgTGV0J3MgYWxzbyBzZWUgaG93IENEMTQgbW9ub2N5dGVzIHJlc3BvbmQgdG8gc3RpbXVsYXRpb24gd2l0aCBpbnRlcmZlcm9uIGdhbW1hLgoKY2QxNC5tb25vIDwtIFN1YnNldERhdGEoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC51c2UgPSAiQ0QxNCBNb25vIiwgc3Vic2V0LnJhdyA9IFQpCmNkMTQubW9ubyA8LSBTZXRBbGxJZGVudChjZDE0Lm1vbm8sIGlkID0gInN0aW0iKQphdmcuY2QxNC5tb25vIDwtIGxvZzFwKEF2ZXJhZ2VFeHByZXNzaW9uKGNkMTQubW9ubywgc2hvdy5wcm9ncmVzcyA9IEZBTFNFKSkKYXZnLmNkMTQubW9ubyRnZW5lIDwtIHJvd25hbWVzKGF2Zy5jZDE0Lm1vbm8pCgpwMiA8LSBnZ3Bsb3QoYXZnLmNkMTQubW9ubywgYWVzKENUUkwsIFNUSU0pKSArIGdlb21fcG9pbnQoKSArIGdndGl0bGUoIkNEMTQgTW9ub2N5dGVzIikKCnBsb3QocDIpCmBgYAoKYGBge3J9CiMgSWYgeW91IHdlcmUgdG8gZ28gaW4gYW5kIGZpbmQgdGhlIGdlbmVzIHRoYXQgbGllIGFib3ZlIHRoZSBsaW5lYXIgY29ycmVsYXRpb24sIHlvdSB3b3VsZCBmaW5kIHRoZXNlOgoKZ2VuZXMudG8ubGFiZWwxID0gYygiSVNHMTUiLCAiTFk2RSIsICJJRkk2IiwgIklTRzIwIiwgIk1YMSIpCmdlbmVzLnRvLmxhYmVsMiA9IGMoIklGSVQyIiwgIklGSVQxIikKZ2VuZXMudG8ubGFiZWwzID0gYygiQ1hDTDEwIiwgIkNDTDgiKQoKIyBOb3csIHBsb3QgdGhlbSBvbiB0aGUgc2NhdHRlcnBsb3RzIGFuZCBzZWUgd2hlcmUgdGhleSBmYWxsLiAgVGhlc2UgZW5kIHVwIGJlaW5nIHRoZSBnZW5lcyB0aGF0IHJlc3BvbmQgc3BlY2lmaWNhbGx5IHRvIGludGVyZmVyb24gZ2FtbWEgc3RpbXVsYXRpb24sIGJvdGggaW4gbmFpdmUgVCBjZWxscyBhbmQgQ0QxNCBtb25vY3l0ZXMgLSBhbiBpbnRlcmZlcm9uIGdhbW1hIHJlc3BvbnNlIHBhdGh3YXkgdGhhdCBtYW55IGNlbGxzIGhhdmUuCgpwMSA8LSBMYWJlbFVSKHAxLCBnZW5lcyA9IGMoZ2VuZXMudG8ubGFiZWwxLCBnZW5lcy50by5sYWJlbDIpLCBhdmcudC5jZWxscywgCiAgICBhZGoudS50ID0gMC4zLCBhZGoudS5zID0gMC4yMykKcDEgPC0gTGFiZWxVTChwMSwgZ2VuZXMgPSBnZW5lcy50by5sYWJlbDMsIGF2Zy50LmNlbGxzLCBhZGoudS50ID0gMC41LCBhZGoudS5zID0gMC40LCAKICAgIGFkai5sLnQgPSAwLjI1LCBhZGoubC5zID0gMC4yNSkKcDIgPC0gTGFiZWxVUihwMiwgZ2VuZXMgPSBjKGdlbmVzLnRvLmxhYmVsMSwgZ2VuZXMudG8ubGFiZWwzKSwgYXZnLmNkMTQubW9ubywgCiAgICBhZGoudS50ID0gMC4zLCBhZGoudS5zID0gMC4yMykKcDIgPC0gTGFiZWxVTChwMiwgZ2VuZXMgPSBnZW5lcy50by5sYWJlbDIsIGF2Zy5jZDE0Lm1vbm8sIGFkai51LnQgPSAwLjUsIGFkai51LnMgPSAwLjQsIAogICAgYWRqLmwudCA9IDAuMjUsIGFkai5sLnMgPSAwLjI1KQpwbG90X2dyaWQocDEscDIpCmBgYAoKYGBge3J9CiMgTm93LCBsb29rIGZvciByZXNwb25zZXMgc3BlY2lmaWMgdG8gcGFydGljdWxhciBjZWxsIHR5cGVzLgoKIyBjb2RlIHRvIGdyYWIgcGFydGljdWxhciBjZWxsIHR5cGVzCmltbXVuZS5jb21iaW5lZEBtZXRhLmRhdGEkY2VsbHR5cGUuc3RpbSA8LSBwYXN0ZTAoaW1tdW5lLmNvbWJpbmVkQGlkZW50LCAiXyIsIAogICAgaW1tdW5lLmNvbWJpbmVkQG1ldGEuZGF0YSRzdGltKQppbW11bmUuY29tYmluZWQgPC0gU3Rhc2hJZGVudChpbW11bmUuY29tYmluZWQsIHNhdmUubmFtZSA9ICJjZWxsdHlwZSIpCmltbXVuZS5jb21iaW5lZCA8LSBTZXRBbGxJZGVudChpbW11bmUuY29tYmluZWQsIGlkID0gImNlbGx0eXBlLnN0aW0iKQoKIyBDRDE0IG1vbm9jeXRlcwpDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlIDwtIEZpbmRNYXJrZXJzKGltbXVuZS5jb21iaW5lZCwgaWRlbnQuMSA9ICJDRDE0IE1vbm9fU1RJTSIsIGlkZW50LjIgPSAiQ0QxNCBNb25vX0NUUkwiLCBwcmludC5iYXIgPSBGQUxTRSkKaGVhZChDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlLCAxNSkKCiMgQ0Q0IG5haXZlIFQgY2VsbHMKQ0Q0bmFpdmVULmludGVyZmVyb24ucmVzcG9uc2UgPC0gRmluZE1hcmtlcnMoaW1tdW5lLmNvbWJpbmVkLCBpZGVudC4xID0gIkNENCBOYWl2ZSBUX1NUSU0iLCBpZGVudC4yID0gIkNENCBOYWl2ZSBUX0NUUkwiLCBwcmludC5iYXIgPSBGQUxTRSkKaGVhZChDRDRuYWl2ZVQuaW50ZXJmZXJvbi5yZXNwb25zZSwgMTUpCgojIEIgY2VsbHMKYi5pbnRlcmZlcm9uLnJlc3BvbnNlIDwtIEZpbmRNYXJrZXJzKGltbXVuZS5jb21iaW5lZCwgaWRlbnQuMSA9ICJCX1NUSU0iLCBpZGVudC4yID0gIkJfQ1RSTCIsIAogICAgcHJpbnQuYmFyID0gRkFMU0UpCmhlYWQoYi5pbnRlcmZlcm9uLnJlc3BvbnNlLCAxNSkKCmBgYAoKYGBge3J9CiMgTm93IHZpc3VhbGl6ZSB0aGUgdG9wIDggZm9sZCBjaGFuZ2VzIGZvciB0aGVzZSAzIGdyb3VwcyBvZiBjZWxscwoKIyBGZWF0dXJlSGVhdG1hcAoKIyBDRDE0IG1vbm9jeXRlcwpGZWF0dXJlSGVhdG1hcChpbW11bmUuY29tYmluZWQsIGZlYXR1cmVzLnBsb3QgPSByb3duYW1lcyhDRDE0bW9uby5pbnRlcmZlcm9uLnJlc3BvbnNlKVsxMDA6MTA3XSwgZ3JvdXAuYnkgPSAic3RpbSIsIHB0LnNpemUgPSAwLjI1LCBrZXkucG9zaXRpb24gPSAidG9wIiwgbWF4LmV4cCA9IDMpCgojIENENCBuYWl2ZSBUIGNlbGxzCkZlYXR1cmVIZWF0bWFwKGltbXVuZS5jb21iaW5lZCwgZmVhdHVyZXMucGxvdCA9IHJvd25hbWVzKENENG5haXZlVC5pbnRlcmZlcm9uLnJlc3BvbnNlKVsxOjhdLCBncm91cC5ieSA9ICJzdGltIiwgcHQuc2l6ZSA9IDAuMjUsIGtleS5wb3NpdGlvbiA9ICJ0b3AiLCBtYXguZXhwID0gMykKCiMgQiBjZWxscwpGZWF0dXJlSGVhdG1hcChpbW11bmUuY29tYmluZWQsIGZlYXR1cmVzLnBsb3QgPSByb3duYW1lcyhiLmludGVyZmVyb24ucmVzcG9uc2UpWzE6OF0sIGdyb3VwLmJ5ID0gInN0aW0iLCBwdC5zaXplID0gMC4yNSwga2V5LnBvc2l0aW9uID0gInRvcCIsIG1heC5leHAgPSAzKQoKYGBgCgojIFNhdmUgdGhlIG9iamVjdHMKCmBgYHtyfQojIHNhdmUgdGhpcyB3b3JrIGFuZCBjb21lIGJhY2sgdG8gaXQgbGF0ZXIKCnNhdmVSRFMocGJtYywgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9wYm1jX2NvbWJpbmVkLnJkcyIsIHNlcCA9ICIiKSkKc2F2ZVJEUyhzdGltLCBmaWxlID0gcGFzdGUoZGlyZWN0b3J5LCAiL3N0aW1fY29tYmluZWQucmRzIiwgc2VwID0gIiIpKQpzYXZlUkRTKGltbXVuZS5jb21iaW5lZCwgZmlsZSA9IHBhc3RlKGRpcmVjdG9yeSwgIi9pbW11bmVfY29tYmluZWQucmRzIiwgc2VwID0gIiIpKQpgYGAKCgo=